I am using a Colibri IMX7D 512MB with a custom Linux Yocto image running on A7 and the default freeRTOS from Toradex on the M4.
We did have some trouble to establish the RPMsg communication between the two cores, but after a while we did figure out that the problem was that we were sending some broken characters from M4 to A7 through the RPMsg channel, that caused some randomness in our communication, working or not working randomly. To avoid that, we did implement a function to check the characters range before sending them, the range following the ASCII table is within ‘32’ to ‘126’, and we got to make the RPMsg work stable, sending and receiving data from both cores. We did implement the same function on the A7 side, but it didn’t change the results.
Our problem is that after some time (±30 min), our RPMsg stops working. From what we did see and debug, the problem seems to be on the A7 side, we can control some stuff with the M4 (like a buzzer when pressing a stop button) and this stuff still works just fine, making we assume that the problem is on the A7 side. Also, our screen freezes and we can’t do anything unless we re-start our device. If we ignore the RPMsg, everything will run just fine without breaking.
We did try to debug the A7 in real-time by printing in some file the RPMsg bytes written and read. We can check the file at all times by logging trough SFTP to the board, and before the RPMsg breaking, we can see perfectly the number of bytes written and read. When it breaks, if we look to the file, we will see that it is printing "-1’ to the bytes written and ‘0’ to the bytes read. Since the A7 will write first before reading incoming data from M4 side, we suppose from the ‘-1’ bytes written, that is the A7 that is crashing the RPMsg, and therefore, all our code just stops and go nuts.
Would you have any idea of what might be causing the RPMsg to stop after a while?
Thanks for the help !