Part Number: TMDXIDK437X
Hi,
I use the Peripheral Interface of the PRU on AM437 to receive asynchronous data that is send from another PRU on the same controller. I send data at a clock of 100kHz and the receiver runs at 800kHz so that I have 8x oversampling. Means, when I send 8 bits I should receive 64.
My problem is that I don't receive 64 but 128, so always twice as much as expected.
I built the receive routine as described in the data sheet. I already changed clock rates, switched the PRUs, switched channels in the peripheral interface and also used another controller to send data, but I always get the same effect.
I tried to analyze the effect I as good as I can, here is how far I've come:
I always send 2 bytes of the same byte, from "0x01 0x01" to "0xFF 0xFF". I doubled the bytes to find out if the bytes I receive are random and just twice as much as I sent or if there is another effect. Here is an example. I send the bytes 0xA3 0xA3, so what I should find in the memory of my receiver (with 8x oversampling) is:
FF 00 FF 00 00 00 FF FF FF 00 FF 00 00 00 FF FF desampling to 10100011 10100011 or 0xA3 0xA3.
And here is what I actually got:
FF 00 00 00 FF 00 FF 00 00 00 FF 00 00 00 FF FF FF 00 FF FF FF 00 FF 00 00 00 FF 00 00 00 FF FF 00 00 FF FF
This looks random, but you can find the wanted result in it, as I marked in the following:
FF 00 00 00 FF 00 FF 00 00 00 FF 00 00 00 FF FF FF 00 FF FF FF 00 FF 00 00 00 FF 00 00 00 FF FF 00 00 FF FF
If you take the red parts out and put the rest together, you have the result you actually want. As I said, I tested this for bit combinations from 1 to 255 and you can apply this pattern to all of them. Receive twice as much as I want and always four bytes wrong, for bytes correct, four bytes wrong and so on...
This is what I found out, but I can't explain why this effect appears or how to get rid of it. Can you help me?
Best regards,
Benjamin
Board: AM437x Industrial Development Kit (IDK)
CCS-Version: 7.2.0.00013
Compiler-Version: TI v2.1.5