We have a product design that utilizes the SC16IS741A chip to convert UART data to SPI (the product is a LTE cellular modem, cellular module is UART, hosts are SPI). We have solid performance when the SPI Master is a Broadcom CPU (aka Raspberry PI or DragonBoard 410C) where we have done the majority of our driver development. But recently when performing a regression test and using a SAMD21G18A (SAMD21G Arduinos) as the SPI Master we have seen the behavior on the SC16IS741A go from intermittent to hard-failure.
The symptoms are no MISO response to register reads, we are assuming this is likely caused by MOSI data (in this one case is a read command of either the scratchpad or line-control registers), is somehow not clocked in to the SC16IS741A. If the read command is not clocked in, clearly the SC16IS741A would not be set to respond on MISO with the register data.
We have checked (and compared to the working Raspberry PI) scope waveforms for
Test Pattern
Write Scratchpad register (data 0x55 or 0xAA)
Read Scratchpad register
Alternate Test
Read LCR register following SC16IS741A reset (should return 0x1D)
So we have tried everything we can think of over the last several days and are posting here thinking someone has crossed this issue before. If anyone has a known solution, an idea, or simply a crazy hunch... please post and let me hear your thoughts.
Thank you in advance for your time and assistance,
Greg
This has been solved! In the handoff of the test script code a key element was accidentally omitted; the test script was not deasserting the CS (chip\slave select) line between write and read actions. When the CS deassert between the two sequential SPI transactions was replaced, the SC16IS741A worked as expected.