Hello everyone!
I'm using Spansion FM3 series microcontroller (namely MB9BFD18T) to connect to ethernet using RMII interface (MII is also supported by the MCU). After long time of debugging I noticed that all my transmitted ethernet frames are exactly twice as short as they should be. Then I probed RMII Tx data pins with an oscilloscope and found out that every high nibble is lost, including the preamble. That is: if, for example I send
Code:
54 04 A6 6E DB 3E 00 00
what I see on RMII is:
Code:
44 6E BE 00
If it was MII/RMII issue, one would expect that every two (not four) bytes will be lost.
Any ideas? Maybe someone experienced similar problem?
Found out what the problem was. There is a bit (PS) in a register (MCR) which is always read as "0" and must always be written as "1". Therefore using compound assigment operators like
Code:
FM3_ETHERNET_MAC->MCR |= EMAC_MACCR_TE
breaks this convention resulting in such a strange behaviour.
Be very careful with compound assignment to registers!