nRF5340, evaluate options for fast/reliable data transfer method between cores

I have a project with real-time requirements for a medical device (see my other post about fast BLE/ESB transfer for the exact details), with the main one being that one nRF5340 ("receiver") needs to receive 10-byte packets every 1-2ms from another nRF5340 ("sender") via some wireless protocol (BLE/ESB). I'm currently interested in programming the "receiver" device to use its network core solely for the wireless comms and its application core to take said data and output it via UART. I would imagine the communication/data-transfer between the network core and application core would need to be at least as fast as my "10-bytes-per-ms requirement".

I have read several documentation links, forum posts, etc. The following options seem to be what's available (FYI I'm quite new to learning/working-with these libraries and protocols):

  • RPC - I got the Entropy sample code working, but before trying to adapt it for my project, I wanted to clarify - is the data being sent wirelessly, even in the dual-core device setup? I take it that's why it's considered "remote" but I'm not too sure.
  • IPC
  • OpenAMP - Seems to be based off shared memory (see here)
  • Bluetooth HCI - Seems quite popular but, if it's Bluetooth-based, I'm skeptical about its feasibility. So far, my experiments with getting fast BLE transfer show that BLE isn't fast enough for my project, but ESB most likely will work.
  • Shared SRAM - I would imagine this is the "fastest" option as it's "wired", but I only found some forum posts with unofficial solutions like here. I was wondering if there was official sample code for this, especially ones that can handle race conditions via semaphores/mutexes and the like.

All in all, I'm hoping to get some advice/feedback on what options are out there, when to use this and that, and which ones I should put my efforts into first. Thanks in advance!

------------------------------------------------------------------------------------------

Development Setup:

  • Board: nRF5340-DK
  • Development Environment: VS Code
  • SDK: nRF Connect 2.5.0
  • OS: Windows 10
Parents
  • Hi 

    I am actually working on a demo for the nRF5340 showing how to run ESB in timeslots alongside BLE, and also how to handle the communication between the network and application cores in order to allow the application core to control the ESB communication. 

    Unfortunately the demo is not quite complete, but feel free to have a look at it to see if you can get some inspiration:
    https://github.com/too1/ncs-esb-ble-mpsl-demo/tree/feature_5340_support_test2

    The nRF5340 specific functionality is only included in the feature_5340_support_test2 branch I linked to above. The master branch only supports nRF52 at the moment. 

    I hope to get more time to work on the demo next week. 

    Best regards
    Torbjørn

  • Thank you for the link! I was only able to briefly look at it, before my team had me direct my efforts elsewhere. We did try RPC similar to what you did here, but it didn't appear to be fast enough. But still, thank you regardless.

Reply
  • Thank you for the link! I was only able to briefly look at it, before my team had me direct my efforts elsewhere. We did try RPC similar to what you did here, but it didn't appear to be fast enough. But still, thank you regardless.

Children
No Data