Хэвийн ажиллагааны үед спи флаш дохио. SPI интерфейс гэж юу вэ

SPI (Цуваа захын интерфэйс) нь микроконтроллер болон дагалдах төхөөрөмжүүдийн хялбар, хямд интерфэйсийг хангах зорилгоор Motorola-аас боловсруулсан цуваа, синхрон, бүрэн дуплекс өгөгдөл дамжуулах стандарт юм. SPI нь заримдаа дөрвөн утастай интерфейс гэж нэрлэгддэг.SPI нь аливаа дамжуулалтыг хост (процессор)-ийн үүсгэсэн нийтлэг цагийн дохиотой синхрончлох синхрон протокол юм. Хүлээн авагч захын төхөөрөмж (боол) нь битийн дарааллын хүлээн авалтыг цагийн дохиотой синхрончилдог. Олон тооны IC-ийг мастер IC-ийн нэг цуваа захын интерфейстэй холбож болно. Мастер нь боол чип дээрх чип сонгох дохиог идэвхжүүлснээр дамжуулах боолыг сонгоно. Процессороос сонгоогүй захын төхөөрөмжүүд SPI дамжуулалтад оролцдоггүй.
SPI нь дөрвөн тоон дохиог ашигладаг:

  • MOSIэсвэл SI - мастер гаралт, боол оролт (Англи хэл Master Out Slave In). Мастераас боол руу өгөгдөл дамжуулахад үйлчилдэг;
  • MISOэсвэл SO - мастер оролт, боол гаралт (Англи хэл Master In Slave Out). Боолоос мастер руу өгөгдөл дамжуулахад үйлчилнэ.
  • SCKэсвэл SCLK - цуваа цагийн дохио (eng. Serial CLocK). Боол төхөөрөмжүүдийн цагийн дохиог дамжуулахад үйлчилдэг.
  • CSэсвэл SS - чип сонголт, боол сонголт (Англи хэл Chip Select, Slave Select) Дүрмээр бол чипийг сонгохдоо логикийн доод түвшингээр хийгддэг.

Туйлшрал ба цагийн фазын хослолоос хамааран SPI үйлдлийн дөрвөн горим байдаг.

SPI горим цаг хугацааны диаграм
SPI0 горим

SPI1 горим
Идэвхтэй импульсийн түвшин өндөр байна.

SPI2 горим

Эхлээд дар, дараа нь шилжүүл.

SPI3 горим
Идэвхтэй импульсийн түвшин бага байна.
Эхлээд ээлж, дараа нь гэнэт.

Хүснэгт нь дараахь зүйлийг хүлээн зөвшөөрдөг.

  • MSB - хамгийн чухал бит;
  • LSB нь хамгийн бага ач холбогдолтой бит юм.

Мастер нь боолын ашигладаг горимд тохируулах ёстой.
SPI интерфейсээр дамжуулан өгөгдөл солилцох үед микроконтроллер нь мастер (Мастер горим) эсвэл боол (Боол горим) байдлаар ажиллах боломжтой. Энэ тохиолдолд хэрэглэгч дараах параметрүүдийг тохируулж болно.

  • хүснэгтийн дагуу ажиллах горим;
  • дамжуулах хурд;
  • дамжуулах формат (хамгийн бага ач холбогдолтой битээс хамгийн чухал эсвэл эсрэгээр).

SPI интерфейсээр дамжуулан мастер - боол бүтцийн дагуу хоёр микроконтроллерийн холболтыг дараах схемийн дагуу гүйцэтгэнэ.

Мастер микроконтроллерийн SCK, CS зүү нь гаралт, боол микроконтроллер нь оролт юм.

Өгөгдлийн дамжуулалтыг дараах байдлаар гүйцэтгэнэ. Мастер микроконтроллерийн SPI өгөгдлийн бүртгэлд бичихдээ SPI модулийн цагийн дохио үүсгэгчийг эхлүүлж, өгөгдлийг MOSI зүү, үүний дагуу боолын MOSI зүү рүү бага багаар өгч эхэлдэг. микроконтроллер. Одоогийн байтны сүүлчийн битийг гаргасны дараа цагийн дохио үүсгэгч "Дамжуулалтын төгсгөл" гэсэн тугийг "1" болгон тохируулснаар зогсдог. Хэрэв SPI модулийн тасалдлыг дэмжиж, идэвхжүүлсэн бол тасалдлын хүсэлт үүснэ. Үүний дараа мастер микроконтроллер нь дараагийн байтыг дамжуулж эхлэх эсвэл боолын SS оролтод логик түвшний "1" хүчдэл өгснөөр түүнийг хүлээх төлөвт оруулна.

Мэдээллийг мастераас боол руу шилжүүлэхтэй зэрэгцэн боолын SS оролтод бага түвшний хүчдэл байгаа тохиолдолд эсрэг чиглэлд дамжуулалт явагдана. Тиймээс ээлжийн мөчлөг бүрт төхөөрөмжүүдийн хооронд өгөгдөл солилцдог. Цикл бүрийн төгсгөлд тасалдлын тугийг мастер микроконтроллер болон боолын аль алинд нь "1" болгож тохируулна. Хүлээн авсан байт нь дараа ашиглахын тулд хүлээн авах буферт хадгалагдана.

Өгөгдлийг хүлээн авахдаа дараагийн байтын сүүлчийн бит шилжилтийн бүртгэлд орохоос өмнө хүлээн авсан байтыг SPI мэдээллийн бүртгэлээс унших ёстой. Үгүй бол эхний байт алга болно.

SS зүү нь идэвхтэй боолыг сонгоход зориулагдсан бөгөөд үргэлж Slave горимд оролт болдог. SS зүүг логик 1 болгон асаах бүрт SPI модулийг дахин тохируулна. Хэрэв өгөгдөл дамжуулах явцад энэ пин-ийн төлөвийн өөрчлөлт гарвал хүлээн авалт, дамжуулалт хоёулаа шууд зогсч, дамжуулсан болон хүлээн авсан байт алдагдах болно.

Хэрэв микроконтроллер Мастер горимд байгаа бол SS пинээр дамжуулан өгөгдөл дамжуулах чиглэлийг хэрэглэгч өөрөө тодорхойлно. Зүүг гаралт болгон тохируулах үед энэ нь ерөнхий зориулалтын зүү болж ажиллах ба SPI модулийн үйл ажиллагаанд нөлөөлөхгүй. Дүрмээр бол энэ тохиолдолд Slave горимд ажилладаг микроконтроллерийн SS зүүг удирдахад ашигладаг.

Хэрэв зүү нь оролт болгон тохируулагдсан бол SPI модулийг зөв ажиллуулахын тулд үүнийг асаах шаардлагатай. өндөр түвшин. Ямар ч гадаад хэлхээний энэ оролтод бага түвшний хүчдэл хэрэглэх нь SPI модулийг микроконтроллерыг боол болгон сонгох гэж хүлээн зөвшөөрөх болно (энэ тохиолдолд өгөгдөл түүнд шилжих болно).

STM32 микроконтроллеруудад SPI интерфэйсийг ашиглах жишээг энд сайн тайлбарласан болно

10 Ом-оос 1 MΩ хүртэлх үнэлгээтэй);

  • холбох утас (жишээлбэл, энд ийм сайн багц байна);
  • Arduino IDE хөгжүүлэлтийн орчинтой хувийн компьютер.
  • 1 Цувралын тайлбар SPI интерфейс

    SPI - Цуваа захын интерфейс эсвэл "Цуваа захын интерфейс"нь хослуулах синхрон холбооны протокол юм мастер төхөөрөмж-тай захын төхөөрөмж(боол). Мастер төхөөрөмж нь ихэвчлэн микроконтроллер байдаг. Төхөөрөмжүүд дөрвөн утсаар холбогддог тул SPI-г заримдаа "дөрвөн утастай интерфейс" гэж нэрлэдэг. Энд дугуйнууд байна:

    Дөрвөн дамжуулалтын горим байдаг ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), цагны импульсийн туйлшралын хослолын улмаас (бид ӨНДӨР эсвэл БАГА түвшинд ажилладаг), Цагийн туйлшрал, CPOL, ба цагны импульсийн үе шат (цагны импульсийн урд эсвэл арын ирмэг дээр синхрончлол), Цагийн үе шат, CPHA.

    Зураг нь энэ хүснэгтийг тайлбарлав.

    SPI интерфейс нь боол төхөөрөмжүүдийг холбох хэд хэдэн сонголтыг өгдөг. бие даасанТэгээд шаталсан. SPI автобустай бие даасан холболттой бол мастер төхөөрөмж нь туслах төхөөрөмж бүрт тус тусад нь ханддаг. Каскадын холболттой бол боол төхөөрөмжүүд нь каскад шиг ээлжлэн ажилладаг.


    SPI интерфейсээр ажиллах холболтын төхөөрөмжүүдийн төрлүүд: бие даасан ба каскад

    2 SPI интерфейсийн хэрэгжилт Arduino гэр бүлийн самбар дээр

    Arduino-д SPI интерфейсийн автобусууд нь тодорхой портууд дээр байдаг. Самбар бүр өөрийн гэсэн зүү хуваарилалттай байдаг. Тохиромжтой болгох үүднээс дүгнэлтийг давхардсан бөгөөд тусдаа хуудсан дээр байрлуулсан болно. ICSP холбогч(Circuit Serial Programming-д хэлхээнд орсон төхөөрөмжийг цуваа протокол ашиглан програмчлах). ICSP холбогч дээр боол сонгох зүү - SS байхгүй гэдгийг анхаарна уу. Arduino-г сүлжээнд мастер төхөөрөмж болгон ашиглах болно гэж таамаглаж байна. Гэхдээ хэрэв шаардлагатай бол та ямар ч Arduino дижитал зүүг SS болгож өгч болно.

    Зураг дээр Arduino UNO болон Nano-д зориулсан SPI автобустай тээглүүрүүдийн стандарт захидал харилцааг харуулав.


    3 Ажлын номын сан SPI интерфейстэй

    SPI протоколыг хэрэгжүүлдэг Arduino-д зориулж тусгай номын сан бичсэн. Энэ нь дараах байдлаар холбогддог: програмын эхэнд нэмнэ үү #SPI.h оруулах.

    SPI протокол дээр ажиллаж эхлэхийн тулд та тохиргоог хийж, дараа нь процедурыг ашиглан протоколыг эхлүүлэх хэрэгтэй. SPI.beginTransaction(). Та үүнийг нэг мэдэгдлээр хийж болно: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Энэ нь бид SPI протоколыг 14 МГц давтамжтайгаар эхлүүлж, өгөгдөл дамжуулах MSB (хамгийн чухал бит) -ээс SPI_MODE0 горимд эхэлдэг гэсэн үг юм.

    Эхэлсэний дараа харгалзах SS зүүг төлөвт тохируулж боол төхөөрөмжийг сонгоно уу БАГА.

    Дараа нь бид тушаалаар өгөгдлийг боол төхөөрөмж рүү шилжүүлнэ SPI.transfer().

    Шилжүүлсний дараа бид SS-ийг мужид буцааж өгдөг ӨНДӨР.


    Протоколтой ажиллах нь тушаалаар дуусна SPI.endTransaction().

    SPI.beginTransaction() болон SPI.endTransaction() заавруудын хооронд шилжүүлгийн гүйцэтгэлийн хугацааг багасгах нь зүйтэй бөгөөд ингэснээр өөр төхөөрөмж өөр тохиргоо ашиглан өгөгдөл дамжуулахыг эхлүүлэх гэж оролдвол давхцал үүсэхгүй.

    4 Ээлжийн бүртгэлийг холбож байна Arduino руу

    Санаж үз практик хэрэглээ SPI интерфейс. Бид SPI автобусаар 8 битийн ээлжийн регистрийг жолоодох замаар LED-үүдийг асаах болно. Arduino-д холбогдоно уу ээлжийн бүртгэл 74HC595. Бүртгэлийн 8 гаралт бүрт хязгаарлах резистороор дамжуулан бид 220 Ом нэрлэсэн утгатай LED холбоно. Уг схемийг зурагт үзүүлэв.


    5 Шилжилтийн бүртгэлийн хяналтын тойм зураг SPI интерфейсээр дамжуулан

    Ноорог бичье.

    #оруулна const int pinSelect = 8; // сонгох зүүг бүртгэнэ хүчингүй тохиргоо()( SPI.begin(); // SPI интерфэйсийг эхлүүлэх pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // боол сонгох (бүртгэл) SPI.transfer(0); // регистрийн агуулгыг арилгах digitalWrite(pinSelect, HIGH); // дамжуулалтын төгсгөл Serial.begin(9600); } хүчингүй давталт() (хувьд (int i=0; i )

    Эхлээд бид SPI номын санг холбож, SPI интерфейсийг эхлүүлнэ. 8-р зүүг SS slave сонгох зүү гэж тодорхойлъё. "0" утгыг илгээж, ээлжийн бүртгэлийг арилгана уу. Цуваа портыг эхлүүлэх.

    Тодорхой LED-ийг гэрэлтүүлэхийн тулд ээлжийн бүртгэл, та түүний оролтод 8 битийн тоог оруулах хэрэгтэй. Жишээлбэл, эхний LED-ийг асаахын тулд бид хоёртын тоо 00000001, хоёр дахь нь - 00000010, гурав дахь нь - 00000100 гэх мэтийг өгдөг. Эдгээр хоёртын тоонуудыг аравтын бутархай тооллын системд хөрвүүлэхэд дараах дарааллыг бүрдүүлнэ: 1, 2, 4, 8, 16, 32, 64, 128 ба 0-ээс 7 хүртэлх хоёрын зэрэглэл юм.

    Үүний дагуу, мөчлөгт давталт() LED-ийн тоогоор бид 0-ээс 7 хүртэл дахин тооцоолно. Функц pow(суурь, экспонент) 2-ыг давталтын тоолуурын хүч хүртэл өсгөнө. Микроконтроллерууд нь "давхар" төрлийн тоонуудтай маш нарийвчлалтай ажилладаггүй тул үр дүнг бүхэл тоо болгон хувиргахдаа дугуйлах функцийг ашигладаг. дугуй (). Мөн бид гарсан тоог ээлжийн бүртгэл рүү шилжүүлнэ. Тодорхой болгохын тулд цуваа портын дэлгэц нь энэ үйл ажиллагааны явцад олж авсан утгыг харуулна. эв нэгдэл нь цэнэггүйдэл дундуур "гүйдэг" - LED нь долгионоор асдаг.

    6 "Гүйлтийн давалгаа" LED-ээс

    LED нь ээлжлэн асдаг бөгөөд бид гэрлийн "долгион" ажиллаж байгааг ажигладаг. LED-уудыг бид SPI интерфейсээр холбосон шилжилтийн бүртгэлийг ашиглан удирддаг. Үүний үр дүнд 8 LED-ийг удирдахад зөвхөн 3 Arduino зүү ашигладаг.Хэрэв бид LED-үүдийг Arduino дижитал портууд руу шууд холбох юм бол LED бүрт тусдаа порт ашиглах шаардлагатай болно.

    Бид Arduino-г SPI автобустай ажиллах хамгийн энгийн жишээг судалсан. Бие даасан болон каскадын холболттой хэд хэдэн ээлжийн бүртгэлүүдийн ажиллагааг тусдаа өгүүллээр нарийвчлан авч үзье.

    SPI - Serial Peripheral Interface - цуваа

    захын интерфейс

    SPI нь бүрэн дуплекс горимд микро схемүүдийн хооронд цуваа синхрон өгөгдөл дамжуулах стандарт юм.

    Энэхүү интерфэйсийг анх Моторола компани микроконтроллер болон дагалдах төхөөрөмжүүдийн энгийн бөгөөд хямд интерфэйсийг хангах зорилгоор бүтээсэн бөгөөд одоогоор олон үйлдвэрлэгчийн бүтээгдэхүүнүүдэд ашиглагдаж байна.

    SPI интерфейс нь I2C-ийн хамт чипүүдийг холбоход хамгийн өргөн хэрэглэгддэг интерфейсүүдийн нэг юм. Энэ нэр нь "Цуваа захын интерфейс" гэсэн үгийн товчлол юм (Англи, SPI автобус -

    SPI автобус), түүний зорилгыг тусгасан - гадаад төхөөрөмжийг холбох автобус. SPI автобус нь мастер-боол зарчмаар зохион байгуулагддаг. Автобусны мастер нь ихэвчлэн микроконтроллер боловч програмчлагдах логик, DSP контроллер эсвэл ASIC байж болно. Автобус мастертай холбогдсон гадаад төхөөрөмжүүдбоолын автобус үүсгэдэг. Тэдний үүргийг янз бүрийн төрлийн микро схемүүд гүйцэтгэдэг. хадгалах төхөөрөмж (EEPROM, Flash санах ой, SRAM), бодит цагийн цаг (RTC), ADC/DAC, дижитал потенциометр, тусгай хянагч гэх мэт.

    SPI интерфейсийн гол бүрэлдэхүүн хэсэг нь ердийн ээлжийн бүртгэл бөгөөд синхрончлол ба бит урсгалын оролт/гаралтын дохио нь интерфэйсийн дохиог бүрдүүлдэг. Тиймээс SPI протоколыг өгөгдөл дамжуулах протокол биш харин хоёр ээлжийн регистр хоорондын өгөгдөл солилцох протокол гэж нэрлэх нь илүү зөв бөгөөд тус бүр нь хүлээн авагч болон дамжуулагчийн үүргийг нэгэн зэрэг гүйцэтгэдэг.

    1. Цахилгааны холболт

    IN стандарт цуваа портоос ялгаатай (eng.стандарт цуваа порт ), SPI нь аливаа дамжуулалтыг мастер (процессор) үүсгэсэн нийтлэг цагийн дохиотой синхрончлох синхрон интерфейс юм. Хүлээн авагч захын төхөөрөмж (боол) нь битийн дарааллын хүлээн авалтыг цагийн дохиотой синхрончилдог. Олон тооны IC-ийг мастер IC-ийн нэг цуваа захын интерфейстэй холбож болно. Мастер нь боол чип дээрх чип сонгох дохиог идэвхжүүлснээр дамжуулах боолыг сонгоно. Процессороос сонгоогүй нэмэлт төхөөрөмжүүд оролцохгүй

    SPI дамжуулалтанд.

    SPI нь дөрвөн тоон дохиог ашигладаг:

    MOSI (Eng. Master Out Slave In) - мастер гаралт (өөр тэмдэглэгээ DO, SDO, DOUT), цуваа өгөгдөл хүлээн авах боол төхөөрөмжийн оролт (өөр тэмдэглэгээ DI, SDI, DIN). Мастераас боол руу өгөгдөл дамжуулахад ашигладаг.

    MISO (Eng. Master In Slave Out) - цуваа өгөгдөл хүлээн авах мастер төхөөрөмжийн оролт (өөр тэмдэглэгээ DI, SDI, DIN), цуваа өгөгдөл дамжуулахад зориулсан slave төхөөрөмжийн гаралт (өөр тэмдэглэгээ DO, SDO, DOUT). Боолоос мастер руу өгөгдөл дамжуулахад үйлчилнэ.

    SCLK (eng. Serial clock) - цуваа цагийн дохио (өөр тэмдэглэгээ DCLOCK, CLK, SCK). Боол төхөөрөмжүүдийн цагийн дохиог дамжуулахад үйлчилдэг.

    CS эсвэл SS - чип сонголт, боолын сонголт

    (Англи Chip Select, Slave Select).

    SPI автобусанд гурван төрлийн холболт байдаг бөгөөд тус бүр нь дөрвөн дохиог агуулдаг. Зөвхөн хоёр микро схем оролцдог хамгийн энгийн холболтыг 1-р зурагт үзүүлэв.

    Цагаан будаа. 1. SPI автобусны хамгийн энгийн холболт

    Энд автобусны мастер нь MOSI шугам дээрх өгөгдлийг өөрийн үүсгэсэн SCLK дохиотой синхрончлолоор дамжуулдаг ба боол нь хүлээн авсан цагийн дохионы тодорхой ирмэг дээр дамжуулагдсан өгөгдлийн битүүдийг барьж авдаг. Үүний зэрэгцээ боол нь өгөгдлийн багцаа илгээдэг. Хэрэв ашигласан боол IC нь өгөгдлийг буцааж илгээх шаардлагагүй эсвэл шаардлагагүй бол MISO мөрийг орхих замаар танилцуулсан схемийг хялбаршуулж болно. Нэг талын өгөгдөл дамжуулахыг DAC, дижитал потенциометр, программчлагдах өсгөгч, драйвер гэх мэт бичил схемээс олж болно. Тиймээс боол IC-ийг холбох хувилбарт 3 эсвэл 4 холбооны шугам шаардлагатай болно. Боол IC нь өгөгдлийг хүлээн авах, дамжуулахын тулд цагны дохио байхаас гадна SS шугамыг бага түвшинд байлгах шаардлагатай. Үгүй бол боол IC идэвхгүй болно. Зөвхөн нэг гадаад IC ашиглаж байгаа үед боол IC-ийн сонгомол оролтыг хатуу тохируулснаар SS шугамыг хасах нь сонирхолтой байж болно. Ийм шийдэл нь маш их хүсээгүй бөгөөд бүтэлгүйтэл, тэр ч байтугай өгөгдөл дамжуулах боломжгүй байдалд хүргэж болзошгүй юм. чип сонгох оролт нь IC-г анхны байдалд нь оруулах бөгөөд заримдаа эхний битийн өгөгдлийн гаралтыг эхлүүлдэг.

    Хэрэв SPI автобусанд хэд хэдэн микро схемийг холбох шаардлагатай бол бие даасан (зэрэгцээ) холболт (зураг 2) эсвэл каскад (цуваа) холболт (зураг 3) ашиглагддаг.

    Цагаан будаа. 2. SPI автобустай бие даасан холболт

    Цагаан будаа. 3. SPI автобус руу шаталсан

    Бие даасан холболт нь илүү түгээмэл байдаг, учир нь. ямар ч SPI нийцтэй чип ашиглан хүрсэн. Энд чип сонгохоос бусад бүх дохионууд зэрэгцээ холбогдсон бөгөөд автобусны мастер нь нэг буюу өөр SS дохиог бага төлөвт шилжүүлснээр ямар боол IC-тэй өгөгдөл солилцохоо тохируулдаг. Ийм холболтын гол сул тал нь боолын микро схемийг хаягжуулах нэмэлт шугам хэрэгтэй (холбооны шугамын нийт тоо 3 + n, энд n нь боол микро схемийн тоо). Каскад нь энэ дутагдалаас ангид байдаг, учир нь эндээс

    хэд хэдэн микро схем нь нэг том ээлжийн бүртгэлийг бүрдүүлдэг. Үүний тулд нэг IC-ийн дамжуулах өгөгдлийн гаралтыг нөгөөгийнх нь хүлээн авах өгөгдлийн оролттой холбоно.Зураг 3-т үзүүлсний дагуу чип сонгох оролтууд энд зэрэгцээ холбогдсон байх ба ингэснээр нийт холбооны шугамын тоог 4-т хадгална. . Гэсэн хэдий ч, түүний дэмжлэгийг ашигласан чипүүдийн баримт бичигт заасан тохиолдолд л шатлалтай байх боломжтой. Үүнийг мэдэхийн тулд ийм холболтыг англиар "daisy-chaining" гэж нэрлэдэг гэдгийг мэдэх нь чухал юм.

    2. Дамжуулах протокол

    SPI дамжуулах протокол нь маш энгийн бөгөөд үнэн хэрэгтээ шилжих үйлдлийг гүйцэтгэх, үүний дагуу синхрончлолын дохионы тодорхой ирмэг дээр өгөгдлийн оролт, гаралт хийхээс бүрддэг ээлжийн бүртгэлийн логиктой ижил юм. . Дамжуулах, хүлээн авах үед авах өгөгдөл нь цагны эсрэг талын ирмэг дээр үргэлж хийгддэг. Энэ нь өгөгдөл найдвартай тогтоогдсоны дараа сэргээхэд зайлшгүй шаардлагатай. Хэрэв бид өсөх эсвэл унах ирмэг нь дамжуулалтын мөчлөгийн эхний ирмэг болж чадна гэдгийг харгалзан үзвэл SPI интерфейсийн логикийн дөрвөн боломжит хувилбар байж болно. Эдгээр сонголтуудыг SPI горим гэж нэрлэдэг бөгөөд хоёр параметрээр тодорхойлогддог:

    CPOL - синхрончлолын дохионы эхний түвшин (хэрэв CPOL = 0 бол дамжуулах цикл эхлэхээс өмнө ба түүний төгсгөлийн дараа синхрончлолын шугам бага түвшинд байна (жишээлбэл, эхний ирмэг нь нэмэгдэж, сүүлчийн ирмэг нь буурч байна), өөрөөр хэлбэл, хэрэв CPOL=1, - өндөр (өөрөөр хэлбэл эхний фронт буурч, сүүлчийнх нь өсч байна));

    CPHA - синхрончлолын үе шат; Энэ параметр нь өгөгдлийг тохируулах, түүвэрлэх дарааллыг тодорхойлдог (хэрэв CPHA=0 бол өгөгдлийг синхрончлолын мөчлөгийн өсөлтийн ирмэг дээр түүвэрлэх ба дараа нь буурах ирмэг дээр өгөгдлийг тохируулах болно.

    өгөгдөл; хэрэв CPHA=1 бол өгөгдлийг цагийн мөчлөгийн өсөлтийн ирмэг дээр тохируулж, буурах ирмэг дээр татаж авна).

    Янз бүрийн SPI горимд ажилладаг мастер болон боол чипүүд тохирохгүй тул боол чип сонгохын өмнө автобусны мастер аль горимыг дэмждэгийг тодруулах нь чухал юм. Микроконтроллерт нэгтгэгдсэн SPI техник хангамжийн модулиуд нь ихэнх тохиолдолд ямар ч SPI горимыг сонгох боломжийг дэмждэг тул ямар ч SPI боол микро схемийг тэдгээрт холбож болно (зөвхөн бие даасан холболтын сонголтод хамаарна). Нэмж дурдахад аль ч горимд SPI протоколыг програм хангамжид хялбархан хэрэгжүүлдэг.

    Таб. 1. SPI горимууд

    Түр зуурын

    диаграм

    синхрончлол

    3. I2 C автобустай харьцуулах

    Өмнө дурьдсанчлан, микро схемийг залгахад 2 утас нь тийм ч алдартай биш юм. цуваа автобус I2 C. Доор та энэ эсвэл тэр цуваа автобусны давуу талыг олж мэдэх боломжтой.

    SPI автобусны ашиг тус

    I2C автобусны давуу тал

    Протоколын туйлын энгийн байдал

    физик давхарга дахь дамжуулалт

    өндөр найдвартай байдлыг хангадаг ба

    дамжуулах хурд. хязгаарлах

    SPI автобусны хурдыг хэмждэг

    I2 C автобус нь хоёр утастай,

    хэдэн арван мегагерц, тиймээс энэ нь

    тооноос үл хамааран

    цацахад тохиромжтой

    түүнд холбогдсон микро схем.

    их хэмжээний өгөгдөл, өргөн

    өндөр хурдтай ашигладаг

    DAC/ADC, LED драйверууд

    дэлгэц болон санах ойн чип

    SPI автобусны бүх шугамууд байдаг

    нэг чиглэлтэй, энэ нь зайлшгүй шаардлагатай

    Олон мастерын чадвар

    асуудлыг шийдвэрлэхэд хялбар болгодог

    автобусанд холбогдсон үед ажиллах

    түвшний хөрвүүлэлт ба

    хэд хэдэн тэргүүлэх микро схемүүд.

    микро схемийн гальваник тусгаарлалт

    I2C протокол нь илүү их байдаг

    стандартчилагдсан, тийм

    Програм хангамжийг хэрэгжүүлэхэд хялбар

    I2C чип хэрэглэгч илүү

    SPI протокол.

    асуудлаас хамгаалагдсан

    сонгогдсонтой нийцэхгүй байна

    бүрэлдэхүүн хэсгүүд.

    4. Үүсмэл болон нийцтэй протоколууд

    БИЧИЛ УТАС.

    National Semiconductor-ийн MICROWIRE протокол нь 0 горим дахь SPI протоколтой ижил байна (CPOL = 0, CPHA = 0).

    Хамгийн их 3 утастай интерфейс

    Энэ интерфэйсийн ялгаа нь нэг чиглэлтэй хоёр шугамаар бүрэн дуплекс дамжуулалт хийхийн оронд нэг хоёр чиглэлтэй DQ шугамаар хагас дуплекс дамжуулалтыг гүйцэтгэдэг.

    QSPI

    CPU-ийн оролцоогүйгээр автоматаар өгөгдөл дамжуулах боломжийг олгодог SPI-ээс өндөр түвшний протокол.

    Нэмж дурдахад SPI интерфейс нь хэд хэдэн тусгай интерфейсийг бий болгох үндэс суурь болдог. JTAG дибаг хийх интерфэйс болон Flash санах ойн картны интерфейс, үүнд орно. SD ба MMC.

    Заавар

    SPI- Цуваа захын интерфейсэсвэл "Цуваа захын интерфейс"нь үндсэн төхөөрөмж (Мастер) болон захын төхөөрөмж (Slave)-тай холбогдох синхрон дамжуулах протокол юм. Мастер төхөөрөмж нь ихэвчлэн . Төхөөрөмжүүд дөрвөн утсаар холбогддог тул SPI-г заримдаа "дөрвөн утастай интерфейс" гэж нэрлэдэг. Энд дугуйнууд байна:
    MOSI (Master Out Slave In)- мастераас боол төхөөрөмж рүү өгөгдөл дамжуулах шугам;
    MISO (Master In Slave Out)- боолоос эзэн рүү дамжуулах шугам;
    SCLK (Цуваа цаг)- мастерийн үүсгэсэн синхрончлолын цаг;
    SS (Боол сонгох)- боол төхөөрөмжийг сонгох шугам; мөр нь "0" үед боол төхөөрөмж нь одоо хандаж байна гэж "ойлгодог".
    Цагийн туйлшралын хослолын улмаас өгөгдөл дамжуулах дөрвөн горим (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) байдаг (бид ӨНДӨР эсвэл БАГА түвшинд ажилладаг), Цагийн туйлшрал, CPOL, ба цагны импульсийн үе шат (цагны импульсийн урд эсвэл арын ирмэг дээр синхрончлол), Цагийн үе шат, CPHA.
    Зураг дээр SPI протоколыг ашиглан төхөөрөмжүүдийг холбох хоёр сонголтыг харуулав: бие даасан ба каскад. SPI автобустай бие даасан холболттой бол мастер төхөөрөмж нь туслах төхөөрөмж бүрт тус тусад нь ханддаг. Каскадтай - төхөөрөмжүүд ээлжлэн, каскад байдлаар ажилладаг.

    Arduino-д SPI интерфейсийн автобусууд нь тодорхой портууд дээр байдаг. Самбар бүр өөрийн гэсэн зүү хуваарилалттай байдаг. Тохиромжтой болгох үүднээс дүгнэлтийг давхардуулж, тусдаа ICSP холбогч дээр байрлуулна (Circuit Serial Programming-д, хэлхээнд багтсан төхөөрөмж, цуваа протокол ашиглан). ICSP холбогч дээр боол сонгох зүү - SS байхгүй гэдгийг анхаарна уу. Arduino-г сүлжээнд мастер төхөөрөмж болгон ашиглах болно гэж таамаглаж байна. Гэхдээ шаардлагатай бол та ямар ч Arduino зүүг SS болгон оноож болно.
    Зураг дээр Arduino UNO болон Nano-д зориулсан SPI автобустай тээглүүрүүдийн стандарт захидал харилцааг харуулав.

    SPI протоколыг хэрэгжүүлдэг Arduino-д зориулж тусгай нэгийг бичсэн. Энэ нь дараах байдлаар холбогддог: програмын эхэнд нэмнэ үү #SPI.h оруулах
    SPI протоколтой ажиллахын тулд та тохиргоог хийж, дараа нь SPI.beginTransaction() процедурыг ашиглан протоколыг эхлүүлэх хэрэгтэй. Та үүнийг нэг мэдэгдлээр хийж болно: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
    Энэ нь бид SPI протоколыг 14 МГц давтамжтайгаар эхлүүлж, өгөгдлийг MSB (хамгийн чухал бит) -ээс "0" горимд дамжуулдаг гэсэн үг юм.
    Эхлүүлсний дараа бид тохирох SS зүүг LOW төлөв рүү шилжүүлж боол төхөөрөмжийг сонгоно.
    Дараа нь бид SPI.transfer () командын тусламжтайгаар өгөгдлийг боол төхөөрөмж рүү шилжүүлдэг.
    Дамжуулсны дараа бид SS-ийг HIGH төлөв рүү буцаана.
    SPI.endTransaction() командын тусламжтайгаар протоколтой ажиллах ажлыг дуусгана. SPI.beginTransaction() болон SPI.endTransaction() заавруудын хооронд шилжүүлгийн гүйцэтгэлийн хугацааг багасгах нь зүйтэй бөгөөд ингэснээр өөр төхөөрөмж өөр тохиргоо ашиглан өгөгдөл дамжуулахыг эхлүүлэх гэж оролдвол давхцал үүсэхгүй.

    SPI интерфейсийн практик хэрэглээг авч үзье. Бид SPI автобусаар 8 битийн ээлжийн регистрийг жолоодох замаар LED-үүдийг асаах болно. 74HC595 регистрийг Arduino руу холбоно уу. Бид 8 гаралт бүрт LED-ийг холбоно (хязгаарлалтын резистороор дамжуулан). Уг схемийг зурагт үзүүлэв.

    Ноорог бичье.
    Эхлээд бид SPI номын санг холбож, SPI интерфейсийг эхлүүлнэ. 8-р зүүг slave сонгох зүү гэж тодорхойлъё. "0" утгыг илгээж, ээлжийн бүртгэлийг арилгана уу. Цуваа портыг эхлүүлэх.
    Шилжилтийн бүртгэлийг ашиглан тодорхой LED-ийг асаахын тулд та түүний оролтод 8 битийн дугаар оруулах хэрэгтэй. Жишээлбэл, эхний LED-ийг асаахын тулд бид хоёртын тоо 00000001, хоёр дахь нь - 00000010, гурав дахь нь - 00000100 гэх мэтийг өгдөг. Аравтын тооллын системд хөрвүүлсэн эдгээр хоёртын тоонууд нь 1, 2, 4, 8, 16, 32, 64, 128 гэсэн дарааллыг бүрдүүлдэг бөгөөд 0-ээс 7 хүртэлх зэрэглэл юм.
    Үүний дагуу, loop() гогцоонд бид 0-ээс 7 хүртэл LED-ийн тоогоор дахин тооцоолно. pow(суурь, экспонент) 2-ыг давталтын тоолуурын хүч хүртэл өсгөнө. Микроконтроллерууд "давхар" төрлийн тоонуудтай тийм ч нарийвчлалтай ажилладаггүй тул бид round() функцийг ашиглан үр дүнг бүхэл тоо болгон хувиргадаг. Мөн бид гарсан тоог ээлжийн бүртгэл рүү шилжүүлнэ. Тодорхой болгохын тулд цуваа портын дэлгэц нь энэ үйлдлийн явцад олж авсан утгуудыг харуулдаг: нэгдэл нь цифрүүдээр дамждаг - LED нь долгионоор асдаг.

    Оршил

    SPI (3 утас) нь микро схемүүдийн хооронд цуваа өгөгдөл солилцох түгээмэл интерфейс юм. SPI интерфейс нь I 2 C-ийн хамт микро схемүүдийг холбоход хамгийн өргөн хэрэглэгддэг интерфейсүүдийн нэг юм. Үүнийг Motorola анх зохион бүтээсэн бөгөөд одоогоор олон үйлдвэрлэгчдийн бүтээгдэхүүнд ашиглагдаж байна. Түүний нэр нь "Цуваа захын автобус" гэсэн товчлол бөгөөд түүний зорилгыг тусгасан - гадаад төхөөрөмжийг холбох автобус. SPI автобус нь мастер-боол зарчмаар зохион байгуулагддаг. Автобусны мастер нь ихэвчлэн микроконтроллер боловч програмчлагдах логик, DSP контроллер эсвэл ASIC байж болно. Мастер автобусанд холбогдсон гадаад төхөөрөмжүүд нь slave автобусыг бүрдүүлдэг. Тэдний үүргийг янз бүрийн төрлийн микро схемүүд гүйцэтгэдэг. хадгалах төхөөрөмж (EEPROM, Flash санах ой, SRAM), бодит цагийн цаг (RTC), ADC/DAC, дижитал потенциометр, тусгай хянагч гэх мэт.

    SPI интерфейсийн гол бүрэлдэхүүн хэсэг нь ердийн ээлжийн бүртгэл бөгөөд синхрончлол ба бит урсгалын оролт/гаралтын дохио нь интерфэйсийн дохиог бүрдүүлдэг. Тиймээс SPI протоколыг өгөгдөл дамжуулах протокол биш харин хоёр ээлжийн регистр хоорондын өгөгдөл солилцох протокол гэж нэрлэх нь илүү зөв бөгөөд тус бүр нь хүлээн авагч болон дамжуулагчийн үүргийг нэгэн зэрэг гүйцэтгэдэг. SPI автобусанд өгөгдөл дамжуулах зайлшгүй нөхцөл бол автобусны цагийн дохиог бий болгох явдал юм. Энэ дохио нь зөвхөн мастер автобус үүсгэх эрхтэй бөгөөд боол автобусны ажиллагаа нь энэ дохионоос бүрэн хамаарна.

    Цахилгааны холболт

    SPI автобусанд гурван төрлийн холболт байдаг бөгөөд тэдгээр нь тус бүрдээ дөрвөн дохиог агуулдаг (үндсэн болон өөр тэмдэглэгээг Хүснэгт 1-ээс үзнэ үү). Зөвхөн хоёр чиптэй хамгийн энгийн холболтыг Зураг 1-д үзүүлэв. Энд автобусны мастер нь MOSI шугам дээрх өгөгдлийг түүгээр үүсгэгдсэн SCLK дохиотой синхрончлон дамжуулдаг бөгөөд slave нь дамжуулагдсан өгөгдлийн битүүдийг тодорхой ирмэг дээр барьж авдаг. цагны дохиог хүлээн авсан. Үүний зэрэгцээ боол нь өгөгдлийн багцаа илгээдэг. Хэрэв ашигласан боол IC нь өгөгдлийг буцааж илгээх шаардлагагүй эсвэл шаардлагагүй бол MISO мөрийг орхих замаар танилцуулсан схемийг хялбаршуулж болно. Нэг талын өгөгдөл дамжуулахыг DAC, дижитал потенциометр, программчлагдах өсгөгч, драйвер гэх мэт бичил схемээс олж болно. Тиймээс боол IC-ийг холбох хувилбарт 3 эсвэл 4 холбооны шугам шаардлагатай болно. Боол IC нь өгөгдлийг хүлээн авах, дамжуулахын тулд цагны дохио байхаас гадна SS шугамыг бага түвшинд байлгах шаардлагатай. Үгүй бол боол IC идэвхгүй болно. Зөвхөн нэг гадаад IC ашиглаж байгаа үед боол IC-ийн сонгомол оролтыг хатуу тохируулснаар SS шугамыг хасах нь сонирхолтой байж болно. Ийм шийдэл нь маш их хүсээгүй бөгөөд бүтэлгүйтэл, тэр ч байтугай өгөгдөл дамжуулах боломжгүй байдалд хүргэж болзошгүй юм. чип сонгох оролт нь IC-г анхны байдалд нь оруулах бөгөөд заримдаа эхний битийн өгөгдлийн гаралтыг эхлүүлдэг.


    Цагаан будаа. 1. SPI автобусны хамгийн энгийн холболт

    Хэрэв SPI автобусанд хэд хэдэн микро схемийг холбох шаардлагатай бол бие даасан (зэрэгцээ) холболт (зураг 2) эсвэл каскад (цуваа) холболт (зураг 3) ашиглагддаг. Бие даасан холболт нь илүү түгээмэл байдаг, учир нь. ямар ч SPI нийцтэй чип ашиглан хүрсэн. Энд чип сонгохоос бусад бүх дохионууд зэрэгцээ холбогдсон бөгөөд автобусны мастер нь нэг буюу өөр SS дохиог бага төлөвт шилжүүлснээр ямар боол IC-тэй өгөгдөл солилцохоо тохируулдаг. Ийм холболтын гол сул тал нь боолын микро схемийг хаягжуулах нэмэлт шугам хэрэгтэй (холбооны шугамын нийт тоо 3 + n, энд n нь боол микро схемийн тоо). Каскад нь энэ дутагдалаас ангид байдаг, учир нь Энд хэд хэдэн микро схемээс нэг том ээлжийн бүртгэл үүсдэг. Үүний тулд нэг IC-ийн дамжуулах өгөгдлийн гаралтыг нөгөөгийнх нь хүлээн авах өгөгдлийн оролттой холбоно.Зураг 3-т үзүүлсний дагуу чип сонгох оролтууд энд зэрэгцээ холбогдсон байх ба ингэснээр нийт холбооны шугамын тоог 4-т хадгална. . Гэсэн хэдий ч, түүний дэмжлэгийг ашигласан чипүүдийн баримт бичигт заасан тохиолдолд л шатлалтай байх боломжтой. Үүнийг мэдэхийн тулд ийм холболтыг англиар "daisy-chaining" гэж нэрлэдэг гэдгийг мэдэх нь чухал юм.


    Цагаан будаа. 2. SPI автобустай бие даасан холболт


    Цагаан будаа. 3. SPI автобус руу шаталсан

    Дамжуулах протокол

    SPI дамжуулах протокол нь маш энгийн бөгөөд үнэн хэрэгтээ шилжих үйлдлийг гүйцэтгэх, үүний дагуу синхрончлолын дохионы тодорхой ирмэг дээр өгөгдлийн оролт, гаралт хийхээс бүрддэг ээлжийн бүртгэлийн логиктой ижил юм. . Дамжуулах, хүлээн авах үед авах өгөгдөл нь цагны эсрэг талын ирмэг дээр үргэлж хийгддэг. Энэ нь өгөгдөл найдвартай тогтоогдсоны дараа сэргээхэд зайлшгүй шаардлагатай. Хэрэв бид өсөх эсвэл унах ирмэг нь дамжуулалтын мөчлөгийн эхний ирмэг болж чадна гэдгийг харгалзан үзвэл SPI интерфейсийн логикийн дөрвөн боломжит хувилбар байж болно. Эдгээр сонголтуудыг SPI горим гэж нэрлэдэг бөгөөд хоёр параметрээр тодорхойлогддог:

    • CPOL - синхрончлолын дохионы эхний түвшин (хэрэв CPOL = 0 бол дамжуулах цикл эхлэхээс өмнө ба түүний төгсгөлийн дараа синхрончлолын шугам бага түвшинд байна (жишээлбэл, эхний ирмэг нь нэмэгдэж, сүүлчийн ирмэг нь буурч байна), өөрөөр хэлбэл, хэрэв CPOL=1, - өндөр (өөрөөр хэлбэл эхний фронт буурч, сүүлчийнх нь өсч байна));
    • CPHA - синхрончлолын үе шат; Энэ параметр нь өгөгдлийг тохируулах, авах дарааллыг тодорхойлдог (хэрэв CPHA=0 бол синхрончлолын мөчлөгийн өсөлтийн ирмэг дээр өгөгдлийг түүвэрлэх ба дараа нь буурах ирмэг дээр өгөгдлийг тохируулах болно; хэрэв CPHA= бол 1, дараа нь тохиргооны өгөгдлийг цагийн мөчлөгийн өсөлтийн ирмэг дээр авч, унах ирмэг дээр дээж авна). SPI горимуудын талаарх мэдээллийг 2-р хүснэгтэд нэгтгэн үзүүлэв.

    Янз бүрийн SPI горимд ажилладаг мастер болон боол чипүүд тохирохгүй тул боол чип сонгохын өмнө автобусны мастер аль горимыг дэмждэгийг тодруулах нь чухал юм. Микроконтроллерт нэгтгэгдсэн SPI техник хангамжийн модулиуд нь ихэнх тохиолдолд ямар ч SPI горимыг сонгох боломжийг дэмждэг тул ямар ч SPI боол микро схемийг тэдгээрт холбож болно (зөвхөн бие даасан холболтын сонголтод хамаарна). Нэмж дурдахад аль ч горимд SPI протоколыг програм хангамжид хялбархан хэрэгжүүлдэг.

    I 2 C шинтэй харьцуулах

    Өмнө дурьдсанчлан, 2 утастай цуваа автобус I 2 C нь микро схемүүдийг залгахад түгээмэл биш юм. Доор та энэ эсвэл тэр цуваа автобусны ашиг тусыг харж болно.

    SPI автобусны ашиг тус I2C автобусны давуу тал
    Физик давхарга дахь дамжуулах протоколын маш энгийн байдал нь дамжуулах өндөр найдвартай байдал, хурдыг тодорхойлдог. SPI автобусны хурдны хязгаар нь хэдэн арван мегагерцээр хэмжигддэг тул их хэмжээний өгөгдөл дамжуулахад тохиромжтой бөгөөд өндөр хурдны DAC/ADC, LED дэлгэцийн драйверууд болон санах ойн чипүүдэд өргөн хэрэглэгддэг. I 2 C автобус нь холбогдсон чипүүдийн тооноос үл хамааран хоёр утастай хэвээр байна.
    SPI автобусны бүх шугамууд нь нэг чиглэлтэй бөгөөд энэ нь микро схемийн түвшний хувиргах, гальваник тусгаарлах ажлыг ихээхэн хялбаршуулдаг. Автобусанд хэд хэдэн мастер микро схемийг холбосон үед олон мастер ажиллах боломж.
    SPI протоколын програм хангамжийг хэрэгжүүлэхэд хялбар байдал. I2C протокол нь илүү стандартчилагдсан тул I2C чипийн хэрэглэгч сонгосон бүрэлдэхүүн хэсгүүдийн үл нийцэх асуудлаас илүү хамгаалагдсан байдаг.

    Үүсмэл болон нийцтэй протоколууд

    • БИЧИЛ УТАС.

      National Semiconductor-ийн MICROWIRE протокол нь 0 горим дахь SPI протоколтой ижил байна (CPOL = 0, CPHA = 0).

    • Хамгийн их 3 утастай интерфейс

      Энэ интерфэйсийн ялгаа нь нэг чиглэлтэй хоёр шугамаар бүрэн дуплекс дамжуулалт хийхийн оронд нэг хоёр чиглэлтэй DQ шугамаар хагас дуплекс дамжуулалтыг гүйцэтгэдэг.

    • QSPI

      CPU-ийн оролцоогүйгээр автоматаар өгөгдөл дамжуулах боломжийг олгодог SPI-ээс өндөр түвшний протокол.

    Нэмж дурдахад SPI интерфейс нь хэд хэдэн тусгай интерфейсийг бий болгох үндэс суурь болдог. JTAG дибаг хийх интерфэйс болон Flash санах ойн картны интерфейс, үүнд орно. SD ба MMC.

    Таб. 1. SPI автобусны цахилгаан дохио

    Тэргүүлэх дугуй боолын автобус
    Үндсэн тэмдэглэгээ Альтернатив тэмдэглэгээ Тодорхойлолт Үндсэн тэмдэглэгээ Альтернатив тэмдэглэгээ Тодорхойлолт
    MOSI ХИЙ, SDO, DOUT MOSI DI, SDI, DIN
    MISO DI, SDI, DIN Цуваа хүлээн авах оролт MISO ХИЙ, SDO, DOUT Цуваа гаралт
    SCLK DCLOCK, CLK, SCK Өгөгдөл дамжуулах синхрончлолын гаралт SCLK DCLOCK, CLK, SCK Синхрончлолын оролтыг хүлээн авах
    SS CS Боол сонгох гаралт (чип сонгох) SS CS Боол сонгох оролт (чип сонгох)


    Ачааж байна...
    Топ