2018-10-31 11:25 AM
While developing a driver for the ST25RU3993, I have encountered a problem where the MISO line appears to stop working. I had previously been able to read out the version ID register, oscillator status, etc. but now everything reads back as zero. There have been no hardware changes to the board, and this has happened on two separate (otherwise identical) boards.
Even though MOSI is always zero, it appears that the ST25RU3993 is at least partially functional. The power consumption increases when I toggle the enable pin high, and it increases again when I command it (via SPI) to enable the RF field. The PLL is also running (I can see a 50kHz waveform on the loop filter pin).
I believe that I first started having problems when trying to write the PLL Main registers. I found a bug here where PLL Main register 1 was being written incorrectly, and I know that getting PLL divisors wrong can cause problems e.g. in microcontrollers (basically overclocking the core which can cause damage) but since this is multiplying up an RF carrier frequency I doubt that this would damage the SPI interface even if wrong. (I also don't think I ever ran the code with this bug on the second failed board.) I had previously been enabling the ST25RU3993's pull-downs on MISO and disabling the strong/fast I/O driver but resetting these values to the default did not seem to help. (My SCLK rate is around 100kHz which should be fine with slow rise-time.)
At this point I could replace one of the ST25RU3993 chips but I want to get an idea of what is causing the faults so I don't immediately kill another one.
Does anyone have any clues what might be happening here? Is there some combination of register settings that can permanently damage the device, especially MISO? Most of the settings I used were the same as in the sample firmware with a few variations for the custom board (which itself is very similar to the reference design). These were also applied in generally the same order.
Any ideas? Thanks.
Solved! Go to Solution.
2018-11-12 10:14 AM
I figured this one out. It was an error in my code.
In register 0x0D (MISC 1) I was inadvertently setting bit 3. This had the effect of making MISO open-drain, which of course kept it from sending anything other than zero since there is nothing on that line to pull it up.
Sorry for the distraction. I'm able to communicate normally again.
2018-11-12 10:14 AM
I figured this one out. It was an error in my code.
In register 0x0D (MISC 1) I was inadvertently setting bit 3. This had the effect of making MISO open-drain, which of course kept it from sending anything other than zero since there is nothing on that line to pull it up.
Sorry for the distraction. I'm able to communicate normally again.