Am 2021-12-27 21:40, schrieb Peter van der Perk: > Hi Peter, > > NuttX has an SocketCAN interface as well. But currently only the Kinetis, > i.MXRT and S32K1 MCU use this interface for their CAN driver. > > There's a porting guide to interface with SocketCAN driver as well > https://nuttx.apache.org/docs/latest/components/drivers/special/socketcan.html > https://www.youtube.com/watch?v=1ZwL7OU30xw > I would advise to use the arch/arm/src/s32k1xx/s32k1xx_flexcan.c driver as a > reference. > > Regarding performance SocketCAN in NuttX is quite comparable to the character > interface. But as Matt indicate the mailbox filtering is done on software > level. You could expose the hardware filters using a ioctl just like the > character driver though. > > I'm not sure which STM32 part you're using but NuttX already has some CAN > drivers in place (albeit the NuttX character driver). It should be fairly > simple to modify these driver and make it compile time configurable to use > the character device interface or SocketCAN interface. > > Kind Regards, > > Peter. > > -----Original Message----- > From: Matthew Trescott <matthewtresc...@gmail.com> > Sent: Monday, 27 December 2021 20:35 > To: peter.m...@mnet-mail.de > Cc: dev@nuttx.apache.org > Subject: [EXT] Re: SocketCAN for STM32 ? > > Caution: EXT Email > > Hi Peter, > > I haven't worked with NuttX's SocketCAN implementation or STM32, but I did > write a "classic" char-device CAN driver for the Tiva MCUs. The reason I > wrote a char-device driver is because the char-device CAN subsystem has > ioctls for things like hardware message filtering and the interface supports > (IIRC) hardware transmit FIFOs if desired. It's possible those features > aren't relevant with 100+ MHz MCUs, but I imagine there are use-cases where > it is. I also found that on the Tiva hardware it is difficult to make use of > the hardware FIFO capability because you still need to get an IRQ for each > message to handle bus errors, lost arbitration, etc that an application might > be interested in. > > It's not that the SocketCAN implementation _couldn't_ support those hardware > features. It just doesn't yet. > > Without looking at the Zephyr code, my guess is that it's probably not > complicated enough to be worth trying to outright port. It would probably be > just as easy if not easier to write an STM32 SocketCAN driver for NuttX and > just use the Zephyr one as a reference. Just my (somewhat uninformed) 2ยข > though. > > Kind regards, > Matt > > On Sun, Dec 26, 2021 at 12:39 PM Peter Marx <peter.m...@mnet-mail.de> wrote: > >> Hi, >> I have seen Peter Van Der Per's great port of SocketCAN to NXP MCUs. On >> Zephyr there is a SocketCAN for STM32 implementation. I am not deep enough >> in C business to judge how difficult it would be to port that to Nuttx. >> Is some insider here around who could comment or maybe works on it already? >> >> BR, >> Peter
Hi Peter, first: sorry for misspelling your name - I had copied it from the YouTube video intro where it was also misspelled. Exactly that video brought me here. I was flashed by the idea of having SocketCAN on a MCU, getting the benefits you list in the video - for me CANopen I am looking for CANopenNode STM32 stack alternatives as I am unhappy with its application API - it is not well explained for "consumers" and several requests for app examples over the years from different people were unheard. I found better alternatives like opensource.lely.com/canopen/ , but that expects SocketCAN... My preferred target would be STM32L432KC, maybe also STM32F103. FlexCAN would not be a requirement for me. "FD" is only on STM32G0 Series, STM32G4 Series, STM32H7 Series, STM32L5 Series, according to a STmicro Application Note (AN5348). For L432 I see a can driver at arch [1]/arm [2]/src [3]/stm32l4/ I this just the lower end and would need either a char-device driver or SocketCAN driver on top of it ? When looking on the flexcan driver link you posted, my hope vanishes to understand all the details. I did embedded C coding decades ago and today i have some practice in Java/IoT coding. For object oriented guy like me it is hard to see in driver code the line where functionality touches the underlying hardware. I have no problems to digest 800 page MCU manuals, means on the register level I am fine. It is just that middleware area above, where it is really hard to learn the concepts. It is a sort of art, I must admit. Not sure how to proceed - any other idea ? Best Regards Peter Links: ------ [1] https://github.com/apache/incubator-nuttx/tree/master/arch [2] https://github.com/apache/incubator-nuttx/tree/master/arch/arm [3] https://github.com/apache/incubator-nuttx/tree/master/arch/arm/src