[En-Nut-Discussion] SPI Bus

duane ellis ethernut at duaneellis.com
Sat Feb 21 15:53:30 CET 2009


Thiago> [ why does the at91 spi driver not use the PCS pins auto magically ]

Bernd> Some slaves require the CS to be asserted over a complete sequence,

My take on NUT interfaces is that they are "purpose built" - and not 
"generic built" - ie: There is a seperate function for uart0, and uart1, 
etc. In contrast, a "generic driver" often requires a bit more code 
space, more features, etc. In a limited resource systems (like nut) 
purpose built is good, but painful when viewed with "generic views".

As Bernd points out - other target chips have strange requirements.

For example some chips require a long delay between the initial SPI 
byte, which acts like a command, and any subsequent bytes, the payload. 
Often these are really a micro processor acting as a SPI slave. ie: The 
chip detects a SPI rx interrupt. Q: How long is the interrupt latency? 
Then, once in the IRQ, the code can poll the SPI interface in tight high 
speed hand optimized loop, then return from the IRQ when done.

I'll add that some SPI hosts have other problems,

The AT91 has a two DMA channels, one TX and one RX.  In contrast: ADI 
Blackfin has a uni-directional DMA interface, you create two back to 
back DMA transfers, use DMA interrupts and and reconfigure the DMA 
between each sub-transfer, while keeping the CS pin active via GPIO. The 
Blackfin has "cs" built into the SPI controller but in this case, it 
cannot be used.

Other chips require balanced DMA transfers - ie: Remember SPI hardware 
really is full duplex, for ever byte transmitted on MOSI, a byte is 
received on MISO.  When talking to a SPI flash, you send a few command 
bytes, and a huge payload.  In the flash case, the transfer is 
unbalanced. Some DMA systems, operating in full duplex mode require the 
TX buffer and RX buffer to be equal sizes (balanced). To help, some 
chips have a "fill with 1s" bit in the SPI interface.

It just gets messy.

-Duane.





More information about the En-Nut-Discussion mailing list