Hello Michal,
On 2024-04-29 22:48, Michal Lenc wrote:
Hello Christian,
thank you a lot for the review.
Thank you for your work.
In addition to Pavel Píša's reply, I
have updated the documentation to provide (hopefully) a better description.
https://otrees.pages.fel.cvut.cz/rtems/rtems-canfd/doc/can/can-html/can.html
Thank you. I did take a look on some of the sections where I had some
open questions, and it's already much clearer now.
I plan to enhance it further, I write it in parallel with my diploma
thesis at the moment and sometimes I have the text already written in
one document and not in the other one. So thank you for pointing out the
parts where the description was not clear. I will address the changes in
can_chip structure later this week.
Take your time.
Regarding future CAN controllers, I hope we will find some time and
resources for the implementation of SJA1000 controller to our stack.
Another interesting controller from our side would be MCAN since we have
some projects with SAMv7 MCU. But those are more long term goals.
If that's the SAMV71 or SAME70 family: Be very careful with that
controller and take a very thorough look at the Errata before you plan
to use it in some productive system. It has some really horrible bugs.
The worst ones that I encountered was that
1. I couldn't use SDRAM and USB at the same time because the SDRAM added
a lot of jitter to the USB PLL.
2. Sometimes a conditioned branch instruction did take the wrong path (I
verified the whole register values and assembly code multiple times
before believing that it really happened).
I followed the errata quite some time. First there were more and more
bugs related to SDRAM. Finally, Microchip just told that you should not
use the SDRAM at all and removed the SDRAM chapter from the reference
manual.
Of course, you can use the chip. But again: I would strongly recommend
taking a really detailed look at the errata sheets for all peripherals
that you plan to use.
Best regards
Christian
Thank you again for your input.
Best regards,
Michal Lenc
On 29. 04. 24 10:56, Christian MAUDERER wrote:
Hello Pavel,
it's quite a big work. So I've started to read through the
documentation to get an overview. Some questions:
Do I understand that correctly, that the only user-facing interface is
via the "/dev/can*" files. There is no separate interface for special
operations, right? That's completely OK for me. I just want to make
sure that I understand it correctly.
Chapter "1.1.1.1: Managing Queues": I assume the limitation that
RTEMS_CAN_DISCARD_QUEUES removes all queues and not only selected ones
is a limitation due to the nature of the ioctl interface or the driver
capabilities? It could be a bit of an annoying limitation in an
application that dynamically wants to register or unregister queues.
Chapter "1.1.1.3: Setting Mode": These look quite controller specific.
If I want to add a controller that has a new mode: Would I just add a
new flag? What happens if we reach 33 flags? Would an array or maybe a
structure with a single uint32_t field be a better choice? I assume
that if a controller doesn't support a mode, (like setting FD on a
non-FD controller), the IOCTL will just return an error?
Chapter "1.1.3: Frame Transmission" and "1.1.4: Frame Reception": The
last argument of "write" is a count. If I see a write, my first guess
is that I have to call it like:
struct can_frame frames[10] = {... /* some values */ ...};
ssize_t rv = write( fd, frames, sizeof(frames) );
But from taking a look at the tests in the repository, the count
is calculated by can_framelen(). Is it possible to send or receive
multiple CAN frames using write or read? Or is it always a single
frame? What happens if I pass a wrong length? Do I send wrong data,
crash the system or the whole CAN bus or do I just get an error? Can
you make that more clear in the documentation?
Some details regarding "struct can_chip":
* There is a pointer called "type". I would use a "const char *" for
that. I expect that stuff like names will never change and having
them constant allows to use a pointer to a flash memory area.
* You have an "int irq". That's not fully compatible to the
rtems_vector_number which is an uint32_t (at the moment).
Regarding the CAN drivers: Do I see it correctly, that currently only
a single (real) device is supported (ctucanfd)? Did you check with
some other hardware controller, whether the whole structures / defines
/ flags close to the hardware do work well for other controllers too?
Like the mode flags from 1.1.1.3. It doesn't really matter which other
controller. From my own attempts to write a driver stack, I just know
that sometimes you make assumptions based on one controller that are
hard to implement on another one. Usually it's not even necessary to
really add a second controller. Just skimming through the manual can
be really helpful. On the other hand, the Doxygen documentation
mentions, that the concept is based on LinCAN. So maybe that already
helps to avoid that trap?
Regarding the device names "/dev/can0" and similar: Currently that
seems to be a fixed scheme, correct? In my experience, sometimes it
can be useful to use longer names instead. For example
"/dev/can_ctufd0". That's especially interesting if a system is
initialized dynamically. For example if you have a USB to CAN adapter
that is enumerated more or less randomly during startup. Is that
supported or are there some fixed assumptions that a can device is
always called "/dev/canX"?
Best regards
Christian
On 2024-04-27 11:53, Pavel Pisa wrote:
Dear RTEMS and CAN community,
I want to report another update in Michal Lenc work
on the generic CAN/CAN FD RTEMS stack.
The Sphinx and Doxygen documentation is generated by CI
on our faculty GitLab server. Links to RTEMS CAN resources
in the section
CAN/CAN FD Subsystem and Drivers for RTEMS
https://canbus.pages.fel.cvut.cz/#cancan-fd-subsystem-and-drivers-for-rtems
Repository https://gitlab.fel.cvut.cz/otrees/rtems/rtems-canfd
Manual
https://otrees.pages.fel.cvut.cz/rtems/rtems-canfd/doc/can/can-html/can.html
Doxygen
https://otrees.pages.fel.cvut.cz/rtems/rtems-canfd/doc/doxygen/html/index.html
CAN/CAN FD frame and header described there
https://otrees.pages.fel.cvut.cz/rtems/rtems-canfd/doc/doxygen/html/structcan__frame.html
Feedback from everybody is welcomed. It would be especially
welcomed if Oliver has some remarks to can_frame_header
and can_frame field names because changes of these
start to be more painfull when/if project is accepted
into RTEMS mainline. Oliver is not probably on RTEMS
list, but I would forward reply there if it will not pass.
I have done initial update of our CAN/CANopen
framework from2003 year to be prepared to work with
new RTEMS solution. Only classic CAN frames for now,
FD is ignored
https://ortcan.sourceforge.net/
https://sourceforge.net/p/ortcan/ortcan-vca/commit_browser
Best wishes,
Pavel
--
Pavel Pisa
phone: +420 603531357
e-mail: p...@cmp.felk.cvut.cz
Department of Control Engineering FEE CVUT
Karlovo namesti 13, 121 35, Prague 2
university: http://control.fel.cvut.cz/
personal: http://cmp.felk.cvut.cz/~pisa
company: https://pikron.com/ PiKRON s.r.o.
Kankovskeho 1235, 182 00 Praha 8, Czech Republic
projects: https://www.openhub.net/accounts/ppisa
social: https://social.kernel.org/ppisa
CAN related:http://canbus.pages.fel.cvut.cz/
RISC-V education: https://comparch.edu.cvut.cz/
Open Technologies Research Education and Exchange Services
https://gitlab.fel.cvut.cz/otrees/org/-/wikis/home
On Friday 05 of April 2024 12:38:28 Pavel Pisa wrote:
Hello everybody,
Michal Lenc has updated the project to switch from RTEMS
semaphores allocated with object ID to self-contained
ones according to the previous response that self-contained
objects are preferred. Se actual state in the repo
https://gitlab.fel.cvut.cz/otrees/rtems/rtems-canfd
The both cases of switching to self-contained objects
(interrupt_lock -> rtems_lock )
(rtems_semaphore_create -> rtems_binary_semaphore_init)
seems to cause measurable increase of overhead in the
performace testing of the virtual CAN interface
on Zynq platform. The real communication performance
does not changed significantly when actual frame sending
time on the wire is in the loop. But that is the first
glimpse result only, we may find time for more evaluation
and even integration of RTEMS to our continuous tests
setup some day.
Michal Lenc's thesis submission deadline is approaching
and we would like to have some feedback to start preparation
of proposal to integrate code into official RTEMS cpukit.
We will be both available at Embedded World Exhibition
and I will even present the article about CAN/CAN FD
latency in Linux kernel at the ewC conference
April 9, 4:00 PM - 5:45 PM
Session 2.3 CONNECTIVITY SOLUTIONS
Continuous CAN Bus Subsystem Latency Evaluation and Stress Testing
on GNU/Linux-Based Systems
https://canbus.pages.fel.cvut.cz/#can-bus-channels-mutual-latency-testing
We will take some species from our hardware ZOO and will
show them on https://www.osadl.org/ booth OSADL booth in hall 4, booth
4-168 so if you want to contact us, you can stop there. We will have
Linux, RTEMS booted MZ_APO kits there and some other
Linux, NuttX ARM and RISC-V boards. Even if we are
not presnet at the moment on the booth, OSADL colleagues will have
contact to us. If there is some RTEMS meeting, we will try
to reserve time.
Best wishes,
Pavel
--
Pavel Pisa
phone: +420 603531357
e-mail: p...@cmp.felk.cvut.cz
Department of Control Engineering FEE CVUT
Karlovo namesti 13, 121 35, Prague 2
university: http://control.fel.cvut.cz/
personal: http://cmp.felk.cvut.cz/~pisa
social: https://social.kernel.org/ppisa
projects: https://www.openhub.net/accounts/ppisa
CAN related:http://canbus.pages.fel.cvut.cz/
RISC-V education: https://comparch.edu.cvut.cz/
Open Technologies Research Education and Exchange Services
https://gitlab.fel.cvut.cz/otrees/org/-/wikis/home
On Wednesday 13 of March 2024 17:01:30 Michal Lenc wrote:
Dear RTEMS developers,
we have made a progress with our CAN stack and virtual/CTU CAN FD
controller tests using standard x86-64 QEMU. We can now provide
scripts
that build the stack and our applications on i386-pc686 target and run
RTEMS in QEMU. The actual CAN stack can still be found in our
university
GitLab
https://gitlab.fel.cvut.cz/otrees/rtems/rtems-canfd
and following steps build and run RTEMS in QEMU:
$ export PATH=$PATH:/opt/rtems/6/bin
$ cd targets/i386_pc686
$ ./setup-host-socketcan
$ ./qemu-i386-pc686-2x-ctu-pci-build
$ ./qemu-i386-pc686-2x-ctu-pci-run
Support for i386_pc686 BSP is located in /opt/rtems/6 in this case.
You
can use following script to compile the BSP with required
configuration
setting.
$ ./i386-rtems-sys.cfg (you might need to change RTEMS_DIR variable
based on your location of RTEMS source code directory)
RTEMS terminal in QEMU should come up after executing run command. You
can try applications for both virtual controller and CTU CAN FD
controller. The controllers have to be initialized and register
which is
done by
can_register -t [target]
command (target is either virtual or ctucanfd). Registered devices are
assigned to test applications with can_set_test_dev [dev0] [dev1]
command, where dev0 and dev1 are paths to character devices. Then test
applications are can_1w (one way) and can_2w (two way). For example
for
CTU CAN FD
# this registers two CTU CAN FD controllers under dev/can0 and
dev/can1
SHLL [/] # can_register -t ctucanfd
# assign dev/can0 and dev/can1 to test applications
SHLL [/] # can_set_test_dev /dev/can0 /dev/can1
# run test applications
SHLL [/] # can_1w
SHLL [/] # can_2w
All those steps are also described in project README or you can use
help
app command in RTEMS terminal to get further description of
commands and
their arguments.
We want to rewrite some other controllers for our CAN stack to provide
further tests and widen the support (SJA1000 would probably be the
first
one on our list), but currently the priority is the full completion of
the stack itself (error reports, all required IOCTLs, etc.).
Best wishes,
Michal Lenc
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel
--
--------------------------------------------
embedded brains GmbH & Co. KG
Herr Christian MAUDERER
Dornierstr. 4
82178 Puchheim
Germany
email: christian.maude...@embedded-brains.de
phone: +49-89-18 94 741 - 18
mobile: +49-176-152 206 08
Registergericht: Amtsgericht München
Registernummer: HRA 117265
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel