Difference between revisions of "Embedded System Tutorial SPI"

From Embedded Systems Learning Academy
Jump to: navigation, search
(Created page with "<font color="red">This article is under construction.</font> == SPI BUS == SPI stands for '''S'''erial '''P'''eripheral '''B'''us. It is a high-speed, full-duplex bus that us...")
 
(Replaced content with "Socialledge is moving to two portals. * The Wiki will remain here for general references about the SJ-One board, and to document student reports. * The bookstack will...")
 
(26 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<font color="red">This article is under construction.</font>
+
Socialledge is moving to two portals.
== SPI BUS ==
+
*  The Wiki will remain here for general references about the SJ-One board, and to document student reports.
SPI stands for '''S'''erial '''P'''eripheral '''B'''us.  It is a high-speed, full-duplex bus that uses minimum of 3 wires to exchange data.  The popularity of this bus rose when SD cards (and its variants ie: micro-sd) officially supported this bus according to the SD specifications.  Furthermore, unlike UART in which you can only have one transmitter and a receiver, SPI bus can have one master and multiple slave decides.
+
* The bookstack will now be used for SJSU assignments
  
=== SPI Bus Signals ===
+
[http://books.socialledge.com/books/embedded-drivers-real-time-operating-systems/chapter/lesson-spi This article has been moved here]
*  MOSI --> Master Out Slave In  (driven by master)
 
*  MISO --> Master In  Slave Out (driven by slave)
 
*  SCK  --> Clock (driven by master)
 
*  CS  --> Chip-select signal, one per slave
 
 
 
The '''CS''' signal selects one slave, and the slave takes over the MISO pin.  If a slave is not selected, then it shall leave the MISO pin in hi-z state.  If multiple slaves have their CS signal asserted, they will try to take control of the MISO pin and damage their MISO pins.  For example, if one slave drives the signal high (connect to 3.3v) and the other drives it low (connect to ground), then short-circuit will occur damaging this pin.
 
 
 
The SCK signal can reach speed of 24Mhz and beyond, however, SD cards are usually limited to 24Mhz according to the specifications.  Furthermore, any signal over 24Mhz on a PCB requires special design consideration to make sure it will not deteriorate, thus 24Mhz is the usual maximum.  Furthermore, you need a CPU twice as fast as the speed you wish to run to support it.  For example, to run at 24Mhz SPI, we need 48Mhz CPU or higher.  Because each wire is driven directly (rather than open-collector), higher speeds can be attained compared to 400Khz I2C bus.
 
 
 
<BR/>
 
== Hardware ==
 
Suppose that you wanted to interface a single SPI bus to three SD cards, the following will need to be done :
 
*  Connect all MOSI, MISO, and SCK lines together
 
*  Connect individual CS lines of three SD cards to SPI master (your processor)
 
 
 
It is also recommended to provide a weak pull-up resistor on each of the SPI wires otherwise some devices like an SD card may not work.  50K resistor should work, however, lower resistor value can acheive higher SPI speeds.
 
 
 
<BR/>
 
== Software Driver ==
 
Unlike UART, the SPI driver is incredibly easy.  The SPI is labeled as SSP on LPC17xx datasheet due to historic reasons, and this chapter in the datasheet shows the software setup very well : <TODO Insert picture>.
 
 
 
=== Multitasking Warnings ===
 
If your software runs multiple tasks, and these tasks can access SPI, care needs to be taken because if two CS signals are asserted at the same time, hardware damage will occur.  This leads to the topic of using a mutex (semaphore) under FreeRTOS and you can read the [[FreeRTOS tutorial]] to learn more.
 

Latest revision as of 17:57, 2 March 2018

Socialledge is moving to two portals.

  • The Wiki will remain here for general references about the SJ-One board, and to document student reports.
  • The bookstack will now be used for SJSU assignments

This article has been moved here