SPI Register Readout Issues with LMS6002D (MyriadRF Dev-Kit, Zipper)

39 views
Skip to first unread message

Rei Zei

unread,
Jan 26, 2017, 3:20:21 PM1/26/17
to Lime Microsystems open-source support channel
Hello everybody,

Hope someone can help me with a litte tricky problem ;)

First, what do I do:
I work with the MyriadRF dev-kit board and the Zipper board since some weeks now to develop a custom LMS6002D software API for Linux.
The API is designed for a ARM CPU and implements direct interaction with the chip via a standard Linux SPI interface (SocketCAN).
Currently, I'm using a Raspberry Pi 3 as test platform.

The API software itself is verified successfully and works fine (no worries here) but I have a strange problem with the SPI communication on hardware level itself since one or two weeks.
Here's a short description of what I do before I get the problem:

1) I connect the Dev-Kit MyriadRF daughter board to the Zipper
2) I connect the +5V supplie and the USB cable
3) I open the LMS-Suite GUI software - everything works as expected
3) Readout with "SPI" module and "Chip->GUI" of all registers -> till here everything is fine
-> as a small test I use the GUI to read register 0x01 or 0x03 several times ...
4) I disconnect the SPI signals on the Zipper Board from the Microcontroller (USB-to-SPI bridge).
-> that required some small adaptions on the Zipper board, I have here high-end soldering equipment, microscopes and all the things and expirence. I've simply removee the four "0 ohm" jumper resistors which connect the Clock, MISO, MOSI and Chipselect lines close to the Microcontroller (USB-to-SPI bridge) to disconnect the Microcontroller on Zipper from LSM6002D - I've added some jumpers so be able to connect everything again - everything well tested
-> No worries here, it works and everything is tested with a multimeter, oscilloscope, logic analyzer, etc.
5) Now I connect my RaspberryPi 3 to the SPI lines which go to the MyriadRF dev-kit and LMS6002D
6) After that I can successfully read and write registers with my Raspberry Pi 3 from/to LMS6002D

BUT: now here comes the strange problem

7) Readout of Register 0x01 works and replies the power-on-reset default register value - but only ONCE!!!
8) If I read the register again it returns always 0x00
-> I've veriefied that the supply was always on, hence no reset. Reset Signal on Zipper is not pulled as well.
-> SPI from Zipper Board via USB is not interfering because it's disconnected.
-> Reference clock generated with Zipper is running (30.72 Mhz) and was not interrupted
-> always the same behaviour after each power-on reset
-> The SPI communication was verified with an oscilloscope. Signals are acceptable clean and timing requirements are fulfilled.

With the GUI the read command works every time and does return the correct value. Nice, but why not if I connect a Raspberry Pi and other ARM dev-boards (I have some others).
SocketCAN SPI code is tested and works with other chips - osci pics show that hardware signals are correct.

The only difference I see on the oscilloscope is the following:

-> The Zipper Board microcontroller introduces between the two consecutive SPI bytes (8 clock edges for address and additional 8 clock edges for replied byte) a delay of  3-4 microseconds.
-> The Linux SocketCAN has only a very short delay between both bytes of less than 2 microseconds.

Does the LMS6002D require this long delay between the address byte and the second 8 clock edges (e.g. to shadow the register value)??
Is there a more precise SPI specification available with more details to the required timing etc.?

Maybe there is somewhere a good application engineer or someone else who had that effect once before and can give me some support.
Thank's in advance for your help.

Best Regards
Reply all
Reply to author
Forward
0 new messages