SPI
De Serial Peripheral Interface (wiki) is een synchrone, full-duplex, seriële verbinding met 4 draden en een aarde. Het systeem bestaat uit maximaal 1 master en minimaal 1 slave. Vrijwel alle µcontrollers hebben een SPI interface opgenomen in de hardware. De theoretische maximum snelheid van SPI is 10mBs. SPI wordt bij mij gebruikt voor 2 doelen, namelijk:

  1. Voor het programmeren van de AVR controllers met ISP (Afb. 2).
  2. Om data uit te wisselen tussen µcontrollers via de SSA-Bus (Afb. 1 + 3).

1 SPI yourself
2 Arduino SPI library

Het ISP programmeren is normaal voor SPI. Het gebruik van dit protocol om ook meerdere processors met elkaar te laten kletsen komt minder vaak voor. Toch is het handig omdat u dan nooit in knoop komt met de eisen van externe apparatuur zoals sensoren of actuatoren. U kunt dan nog steeds zonder problemen werken met RS-232 en TWI  en alle andere voorzieningen die uw controller biedt. Er staat er in iedere datasheet van Atmel controllers een uitgebreide beschrijving van de manier waarop SPI in deze controllers is geimplementeerd.

De meest primitieve vorm van een programma dat 1 SPI byte shift is spi_mas tezamen met spi_slv. Dit duet is geschreven voor 2 ATmega8 controllers, maar zou in principe op alle AVR controllers moeten kunnen lopen. De messageserver software is een uitgebreide SPI master. Een voorbeeld van een uitgebreide slave is de joystick software.


  • SPI gebruiken voor meer zaken dan enkel ISP
    SPI wordt normaalgesproken gebruikt voor het In System Programmeren van de controller. Maar het kan ook worden gebruikt om controllers op een relatief hoge snelheid met elkaar te laten communiceren.  Het is bovendien zeer compatible, want als het op een controller niet in hardware is uitgevoerd dan kan het altijd nog met software geemuleerd worden op vrijwel iedere controller. Verschillende kloksnelheden van de controllers spelen ook geen rol. De master dient echter minstens zo snel te zijn als de slave. Indien u SPI wilt gebruiken voor meer dan enkel programmeren dan zijn er twee verschillende situaties te onderscheiden:
    • Iedere controller heeft een eigen programmeer aansluiting.
      De controllers zijn allen verbonden met een centrale reset button. In dit geval moet er voor iedere controller een diode worden opgenomen in de centrale reset lijn. Deze zorgt er voor dat tijdens het programmeren van een controller de resetlijn van de andere controllers niet wordt laaggetrokken waardoor deze ook worden geprogrammeerd.
    • Er is 1 centrale programmeer aansluiting voor alle controllers.
      Deze situatie is nog in ontwikkeling. Volgens Atmel AN AVR048 is de beste methode om dan met een keuzeschakelaar (bijv.: STUFENDREHSCHALTER . 1-POL 10STELL. (Conrad Electronic)) de SPISCK (RESET????) naar de juiste controller door te verbinden. Na een programmeerrun zijn dan direct alle controllers gereset, maar enkel de controller waaraan ook de SCK was verbonden wordt opnieuw geprogrammeerd. Indien echter het SPI protocol gebruikt moet worden voor communicatie moet de SCK van alle controllers worden aangesloten op de bus. De selectie van de controllers gebeurt dan via de SS aansluiting van de clients. Er moet dus een schalaar worden toegevoegd waarmee in de ene stand (Program) geprogrammeerd kan worden en in de andere stand (Run) de SPI bus voor communicatie gebruikt kan worden. Dit kan met een 12-polig-om schakelaar zoals de draaischakelaar van Stuut en Bruin.
  • Atmel AVR320: Software SPI Master
    Atmel AVR151: Setup And Use of The SPI
    AVR Beginners: The Serial Peripheral Interface (SPI)
    Atmel AVR303: SPI-UART Gateway