Elektr aloqasi:
SPI avtobusiga ulanishning uchta turi mavjud, ularning har biri to'rtta signalni o'z ichiga oladi (ularning asosiy va muqobil belgilari uchun 1-jadvalga qarang). Faqat ikkita chip ishtirok etadigan eng oddiy ulanish 1-rasmda keltirilgan. Bu erda master shinasi MOSI liniyasidagi ma'lumotlarni u hosil qilgan SCLK signali bilan sinxronlashtirishda uzatadi va qul uzatilgan ma'lumotlar bitlarini ma'lum chekkalarda ushlaydi. qabul qilingan soat signalining. Shu bilan birga, qul o'zining ma'lumot xabarini yuboradi. Taqdim etilgan sxema MISO liniyasini istisno qilish yo'li bilan soddalashtirilishi mumkin, agar ishlatilgan qul IC o'zaro ma'lumot uzatishni ta'minlamasa yoki kerak bo'lmasa. Ma'lumotlarni bir tomonlama uzatishni DAC, raqamli potensiometrlar, dasturlashtiriladigan kuchaytirgichlar va haydovchilar kabi mikrosxemalarda topish mumkin. Shunday qilib, qul ICni ulashning ko'rib chiqilgan variantiga 3 yoki 4 ta aloqa liniyasi kerak. Qul IC ma'lumotni qabul qilishi va uzatishi uchun, sinxronizatsiya signalining mavjudligidan tashqari, SS chizig'ini past darajaga burish kerak. Aks holda, bo'ysunuvchi IS faol bo'lmaydi. Faqat bitta tashqi IC ishlatilganda, qulni IC tanlovi kirishini past darajaga o'rnatib, SS chizig'ini chiqarib tashlash vasvasaga solishi mumkin. Bunday echim juda istalmagan va ishlamay qolishiga olib kelishi mumkin yoki hatto ma'lumotlarni uzatish mumkin emas, chunki chipni tanlash usuli ICni dastlabki holatiga o'tkazishga xizmat qiladi va ba'zida birinchi ma'lumotlar bitining chiqishini boshlaydi.
1.rasm. SPI avtobusiga eng oddiy ulanish.
Agar SPI avtobusiga bir nechta mikrosxemalarni ulash zarur bo'lsa, mustaqil (parallel) ulanish (2-rasm) yoki kaskadli (ketma-ket) ulanish (3-rasm) ishlatiladi. Mustaqil ulanish ko'proq tarqalgan, chunki har qanday SPI-ga mos mikrosxemalardan foydalanilganda erishiladi. Bu erda mikrosxemalarni tanlashdan tashqari barcha signallar parallel ravishda ulanadi va asosiy avtobus u yoki bu SS signalini past holatga o'tkazib, qaysi qul IC bilan ma'lumotlarni almashishini belgilaydi. Bunday ulanishning asosiy kamchiligi - qul mikrosxemalariga murojaat qilish uchun qo'shimcha chiziqlarga ehtiyoj (aloqa liniyalarining umumiy soni 3 + n, bu erda n - qul mikrosxemalari soni). Kaskad aloqasi ushbu kamchilikdan xalos bo'ldi, chunki bu erda bir nechta mikrosxemalardan bitta katta smenali registr hosil bo'ladi. Buning uchun 3-rasmda ko'rsatilgandek, bitta IC ning ma'lumotlar uzatish chiqishi boshqasining ma'lumotlarni qabul qilish kiritishiga ulanadi, bu erda 3-rasmda ko'rsatilgandek, IC tanlovi kirishlari parallel ravishda ulanadi va shu bilan aloqa liniyalarining umumiy soni tenglashtiriladi. 4. Biroq, kaskadli ulanishdan foydalanish faqat uning qo'llab-quvvatlanishi ishlatilgan mikrosxemalar uchun hujjatlarda ko'rsatilgan taqdirda mumkin bo'ladi. Buni bilish uchun ushbu aloqaning ingliz tilida "daisy-chaining" deb nomlanishini bilish muhimdir.
2.rasm. Mustaqil SPI avtobus ulanishi.
3.rasm. SPI kaskadli ulanish.
Uzatish protokoli
SPI interfeysi orqali uzatish protokoli juda sodda va aslida smenali registrning mantig'iga o'xshaydi, bu almashtirish ishini bajarish va shunga mos ravishda ma'lumotlarning bittadan bittadan kirishi va chiqarilishidan iborat. sinxronizatsiya signali. Ma'lumotlar to'plamini uzatish va qabul qilish har doim soatning qarama-qarshi tomonlarida amalga oshiriladi. Bu ma'lumotlar ishonchli tarzda o'rnatilgandan so'ng namuna olishni ta'minlash uchun zarur. Agar ko'tarilgan yoki tushgan chekka uzatish davridagi birinchi chekka rolini bajarishi mumkinligini hisobga olsak, u holda SPI interfeysi mantig'ining to'rtta varianti mavjud. Ushbu parametrlar SPI rejimlari deb nomlanadi va ikkita parametr bilan tavsiflanadi:
CPOL - bu sinxronizatsiya signalining boshlang'ich darajasi (agar CPOL = 0 bo'lsa, u holda uzatish tsikli boshlanishidan oldin va uning tugashidan keyin past darajadagi sinxronizatsiya chizig'i (ya'ni, birinchi chekka ko'tarilib, oxirgisi pasaymoqda) , aks holda, agar CPOL = 1 bo'lsa, u yuqori (ya'ni birinchi old tushadi, ikkinchisi ko'tariladi));
CPHA - sinxronizatsiya bosqichi; ushbu parametr sozlamalar va ma'lumotlar namunalarini olish ketma-ketligini belgilaydi (agar CPHA = 0 bo'lsa, unda ma'lumotlar namuna olish sinxronizatsiya tsiklining etakchisida, so'ngra tushgan chekkada ma'lumotlar sozlamalari amalga oshiriladi; agar CPHA = 1 bo'lsa , keyin sozlash ma'lumotlari soat tsiklining etakchisida bajariladi va tushgan tomonida namuna olinadi). SPI rejimlari to'g'risidagi ma'lumotlar 2-jadvalda umumlashtirilgan.
Turli xil SPI rejimlarida ishlaydigan usta va xizmatchilarning IClari mos kelmaydi, shuning uchun qul IClarini tanlashdan oldin, master avtobus tomonidan qaysi rejimlar qo'llab-quvvatlanishiga aniqlik kiritish kerak. Mikrokontrollaga o'rnatilgan SPI apparat modullari ko'p hollarda har qanday SPI rejimini tanlash imkoniyatini qo'llab-quvvatlaydi va shuning uchun har qanday qul SPI mikrosxemalari ularga ulanishi mumkin (faqat mustaqil ulanish opsiyasiga tegishli). Bundan tashqari, har qanday rejimdagi SPI protokoli dasturiy ta'minotda osonlikcha amalga oshiriladi.
I2C avtobusi bilan taqqoslash:
Yuqorida aytib o'tganimizdek, 2 simli I2C seriyali avtobus mikrosxemalarni o'zaro bog'lashda bir xil darajada mashhur. Quyida ma'lum bir ketma-ket avtobusning afzalliklarini ko'rishingiz mumkin.
SPI avtobusining afzalliklari
|
I2C avtobusining afzalliklari
|
Jismoniy qatlamda uzatish protokolining o'ta soddaligi yuqori ishonchlilik va yuqori tezlikda uzatishni aniqlaydi. SPI avtobusining yakuniy tezligi o'nlab megagerts bilan o'lchanadi va shuning uchun katta miqdordagi ma'lumotlarni uzatish uchun ideal va yuqori tezlikda ishlaydigan DAC / ADC, LED displey drayverlari va xotira chiplarida keng qo'llaniladi.
|
I2C avtobusi, unga ulangan mikrosxemalar sonidan qat'i nazar, ikki simli bo'lib qoladi.
|
SPI avtobusining barcha yo'nalishlari bir yo'nalishli bo'lib, bu mikrosxemalarning darajadagi konversiyasi va galvanik izolatsiyasi muammosini hal qilishni ancha osonlashtiradi.
|
Bir nechta master mikrosxemalar avtobusga ulanganda ko'p ustalik bilan ishlash imkoniyati.
|
SPI protokolining dasturiy ta'minotini amalga oshirishning soddaligi.
|
I2C protokoli ko'proq standartlashtirilgan, shuning uchun I2C chiplari foydalanuvchisi tanlangan komponentlarning mos kelmasligi muammolaridan ko'proq himoyalangan.
|
Hosil bo'lgan va mos keladigan protokollar.
MICROWIRE.
Milliy yarim o'tkazgichning MICROWIRE protokoli 0 rejimidagi SPI protokoli bilan to'liq bir xil (CPOL = 0, CPHA = 0).
Maksim 3 simli interfeys
Ushbu interfeysning farqi shundaki, u ikki tomonlama yo'nalish bo'yicha to'liq dupleks uzatishni o'rniga bitta ikki yo'nalishli DQ liniyasi bo'yicha yarim dupleks uzatishni amalga oshiradi.
QSPI
CPU-ning ishtirokisiz ma'lumotlarni uzatishni avtomatlashtiradigan SPI-dan yuqori darajadagi protokol.
Bundan tashqari, SPI interfeysi bir qator ixtisoslashgan interfeyslarni yaratish uchun asos bo'lib xizmat qiladi. JTAG disk raskadrovka interfeysi va Flash xotira kartasi interfeyslari, shu jumladan. SD va MMC.
1.jadval. SPI avtobusining elektr signallari.
2.jadval. SPI rejimlari.
SPI va Arduino:
Nazariya
Chiqish
Kiritish
Bu SPI avtobusiga bag'ishlangan va u bilan Arduino platformasida ishlashga bag'ishlangan maqolalar turkumidagi birinchi maqola. Mavzu juda keng, shuning uchun nazariyadan boshlaylik.
SPI (Serial Periferik Interface) yoki Serial Periferik Interface - Motorola tomonidan tizim komponentlari - mikrokontroller va atrof-muhit birliklari o'rtasida tez va oson amalga oshiriladigan ma'lumotlar almashinuvini tashkil etish uchun ishlab chiqilgan. Avtobusda bitta usta va bir nechta qul bo'lishi mumkin.
Ma'lumot almashish uchun interfeysda 4 ta satr ishlatiladi:
SCLK - ketma-ket soat: soat signali (masterdan)
Boshqa belgilar: SCK, CLK
Arduino: pin 13
MOSI - Master Output, Slave Input: xo'jayindan qulga ma'lumotlar
Boshqa belgilar: SDI, DI, SI
Arduino: pin 11
MISO - Master Input, Slave Output: quldan mastergacha ma'lumotlar
Boshqa belgilar: SDO, DO, SO
Arduino: pin 12
SS - Slave Select: qul tanlash; etakchi tomonidan belgilanadi
Boshqa belgilar: nCS, CS, CSB, CSN, nSS, STE
Arduino: standart pin 10
SS liniyasi odatda har bir qul uchun alohida bo'ladi, lekin ba'zi bir qullar bitta SSga ulanishi mumkin - bu usul qurilmalarni kaskadlash uchun ishlatiladi.
Standart SPI algoritmi quyidagicha:
Magistr kerakli qul ulangan SS satrida past darajani o'rnatadi.
Magistr soatni SCLK-da "silkitib" o'rnatadi va SCLK-ning har bir tebranishi bilan bir vaqtning o'zida qulga soatiga bitni uzatgan holda MOSI-da kerakli darajani o'rnatadi.
Qul SCLK har bir "qurituvchi" uchun MISO-da kerakli darajani o'rnatadi va masterga soatiga bitni uzatadi.
Magistr uzatishni yakunlash uchun SS balandligini o'rnatadi.
SPI - bu to'liq dupleks avtobus - ma'lumotlar har ikki yo'nalishda bir vaqtning o'zida uzatiladi. Odatda avtobus tezligi 1-50 MGts oralig'ida. Uzatish algoritmining favqulodda soddaligi tufayli SPI turli xil elektron qurilmalarda keng qo'llaniladi - masalan, datchiklar, xotira chiplari, radio modullar va hk.
Umuman olganda, SPI soat kutupluluğu (CPOL) va soat fazasi (CPHA) kombinatsiyasiga asoslangan to'rtta uzatish rejimiga ega. Oddiy so'zlar bilan aytganda, CPOL - uzatishdan oldin va keyin soat chizig'idagi daraja: past (0) yoki yuqori (1). Va faza soat signalining ko'tarilgan yoki tushgan chekkasida bitlarning uzatilishini aniqlaydi:
Tartibni 0: CPOL = 0, CPHA = 0
Biroz o'qish soat signalining chetida (o'tish 0 ⇨ 1), yozish esa tushgan chekkada (1 ⇨ 0) sodir bo'ladi.
1-rejim: CPOL = 0, CPHA = 1
O'qish kamaymoqda, yozish old tomonda.
Tartibni 2: CPOL = 1, CPHA = 0
O'qish kamayib bormoqda, yozuv old tomonda.
Tartibni 3: CPOL = 1, CPHA = 1
O'qish old tomonda, yozish kamaymoqda.
SPI ma'lumotlari eng muhim bit oldinga (Arduino uchun sukut bo'yicha) yoki eng kam bit bilan uzatilishi mumkin. Odatda, birinchi variant ishlatiladi, lekin siz qurilma bilan ishlashni boshlashdan oldin, hujjatlarda ushbu fikrga aniqlik kiritishingiz kerak.
SPI kutubxonasi haqida qisqacha
Ushbu kutubxona Arduino-da SPI-da ishlash uchun AVR-ning apparat imkoniyatlaridan foydalanadi va faqat SPI master rejimida. Unda juda kam funktsiyalar mavjud:
begin () va end ()
SPIni ishga tushirish va o'chirish. Ishga tushirilganda SCLK (13), MOSI (11) va SS (10) chiziqlari pinka o'rnatiladi, bu esa SCK va MOSI ni past va SS balandligini belgilaydi. End () chaqiruvi chiziqqa tegmaydi, uni qo'ng'iroqdan oldingi holatida qoldiradi - shunchaki mikrokontrolderning SPI blokini o'chiradi.
setBitOrder (buyurtma)
Ma'lumot bitlarini yuborish tartibini belgilaydi (buyurtma):
MSBFIRST - jo'natmaning eng muhim biti birinchi bo'lib (sukut bo'yicha)
LSBFIRST - unchalik ahamiyatli bo'lmagan bit
setClockDivider (ajratuvchi)
SPI soat ajratuvchisini asosiy chastotaga nisbatan o'rnatadi. Bo'luvchilar 2, 4, 8, 16, 32, 64 va 128. Tegishli doimiylarda SPI_CLOCK_DIVn kabi ismlar mavjud, bu erda n bo'luvchi, masalan, SPI_CLOCK_DIV32. Odatiy bo'lib, ajratuvchi 4 ga teng - 16 MGts Arduino MCU ning odatdagi soat tezligida, SPI 4 MGts da ishlaydi.
Eslatma: agar qurilma, masalan, 1,25 MGts chastotasini qo'llab-quvvatlasa, u holda, masalan, ushbu yoki kamroq chastotaga mos keladigan ajratgichni o'rnatishingiz kerak - 16.
setDataMode (rejim)
SPI_MODE0 (standart), SPI_MODE1, SPI_MODE2 va SPI_MODE3 sobitlari yordamida SPI ish rejimini o'rnatadi. Ular CPOL va CPHA parametrlari bilan bir xil rejimlardir.
o'tkazish (qiymat)
Ikki tomonlama uzatishni amalga oshiradi: qiymat baytini uzatadi va quldan olgan baytni qaytaradi.
Bundan tashqari, shiftIn (miso_pin, sclk_pin, bit_order) va shiftOut (mosi_pin, sclk_pin, order, value) funktsiyalari mavjud, ular SPI orqali ma'lumotlarning yarim dupleksli uzatilishini ta'minlaydi - transfer () usulining bunday yarmlari: shiftIn () faqat qabul qiladi va shiftOut () faqat ma'lumotlarni uzatadi. Ularning dalillaridan ko'rinib turibdiki, ular har qanday Arduino raqamli pinlarini SPI liniyalari sifatida ishlatishga imkon beradi, lekin siz ularni o'zingizning kirish / chiqish satrlari sifatida sozlashingiz kerak, shiftIn () va shiftOut () funktsiyalari bunday emas.
Havolalar
Vikipediya va gaw.ru da SPI haqidagi maqolalar
SPI kutubxonasi hujjatlari va ulanish to'g'risidagi eslatma
Keyingi mavzu SPI va Arduino: chiqish
UPD 2015-12-10
SPI uzatish rejimini sozlash haqida.
#define SPI_MODE0 0x00
#define SPI_MODE1 0x04
#define SPI_MODE2 0x08
#define SPI_MODE3 0x0C
#define SPI_MODE_MASK 0x0C // CPOL = bit 3, CPHA = bit 2 on SPCR
...
class SPIClass {
public:
...
inline static void setDataMode(uint8_t dataMode) {
SPCR = (SPCR & ~SPI_MODE_MASK) | dataMode;
}
...
};
extern SPIClass SPI;
Shunday qilib, SPI uzatish rejimini o'rnatishda SPCR registrining 3 va 2-bitlari tuzilgan:
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
Shunday qilib, kod: SPI.setDataMode(SPI_MODE1);
AVR mikrokontrollerlariga standart interfeyslarni amalga oshiradigan modullar kiradi. Ushbu modullar turli xil periferik qurilmalar, masalan, raqamli sensorlar, xotira chiplari, DAC, ADC, boshqa mikrokontrollerlar va boshqalar bilan ma'lumot almashish uchun ishlatiladi. Ushbu maqolada, masalan, atmega16 mikrokontrolleridan foydalanib, biz ketma-ket periferik interfeys moduli yoki SPI (ketma-ket periferik interfeys) moduli bilan qanday ishlashni aniqlaymiz.
Kirish
SPI - bu mikrosxemalar o'rtasida ketma-ket ma'lumotlar almashinuvi uchun mo'ljallangan to'rt simli sinxron avtobus. Interfeys Motorola tomonidan ishlab chiqilgan, ammo hozirda barcha ishlab chiqaruvchilar tomonidan foydalanilmoqda. Ushbu interfeys foydalanish va amalga oshirish qulayligi, yuqori valyuta kursi va qisqa diapazon bilan ajralib turadi.
Har qanday SPI ma'lumotlar almashinuvida qurilmalardan biri Master, ikkinchisi Slave. Odatda (lekin har doim ham emas) mikrokontroller usta vazifasini bajaradi. Magistr periferik qurilmani faol holatga keltiradi va soat signalini va ma'lumotlarini hosil qiladi. Bunga javoban qul qurilmasi o'z ma'lumotlarini masterga uzatadi. Ma'lumotlarni uzatish ikkala yo'nalishda ham soat signali bilan sinxron tarzda amalga oshiriladi.
Jismoniy jihatdan SPI ham uzatuvchi, ham qabul qiluvchi vazifasini bajaradigan smenali registr asosida amalga oshiriladi.
SPI aloqasi printsipi quyidagi rasmlarda aks ettirilgan.
Ushbu interfeys tomonidan ishlatiladigan signallar quyidagi maqsadlarga ega:
MOSI - Master Output / Slave Input. Asosiy chiqish / qul kiritish. Ma'lumotlarni xo'jayindan qulga o'tkazish uchun xizmat qiladi.
MISO - Master Input / Slave Output. Asosiy kirish / qul chiqishi. Quldan xo'jayinga ma'lumot uzatish uchun xizmat qiladi.
SLK - ketma-ket soat. Sinxronizatsiya signali. Soat signalini barcha qullarga etkazish uchun xizmat qiladi.
SS - qul tanlash. Qullarni tanlash. Qul qurilmasini tanlaydi.
Chip ishlab chiqaruvchilari ko'pincha ushbu signallar uchun turli xil nomlardan foydalanadilar. Shu bilan bir qatorda variantlar bo'lishi mumkin:
MOSI - DO, SDO, DOUT.
MISO - DI, SDI, DIN.
SCK - CLK, SCLK.
SS - CS, SYNC.
SPI ulanish diagrammasi
Ikkala qurilmani SPI orqali ulashning odatiy sxemasi shunday ko'rinadi.
Bundan tashqari, xo'jayinga bir nechta qullarni ulash mumkin. Biroq, har qanday vaqtda, almashinuv ulardan faqat bittasi bilan amalga oshirilishi mumkin, qolganlari harakatsiz holatda bo'lishi kerak.
Istisno - bu SPI kaskadli ulanishi. Ushbu ulanish bilan qurilmalarning smenali registrlari bitta katta registrni tashkil qiladi va SPI satrlari soni 4 ga teng bo'lib qoladi. To'g'ri, barcha mikrosxemalar bunday aloqani qo'llab-quvvatlamaydi.
Bolalar sxemasining qisqartirilgan versiyasi MOSI yoki MISO liniyasidan foydalanilmaganda ham mumkin. Ya'ni, ma'lumotlarni uzatish faqat bitta yo'nalishda amalga oshiriladi. Bunday sxemalar, masalan, tashqi DAC va ADC mikrosxemalarini mikrokontrollagichga ulashda ishlatiladi.
SPI interfeysi orqali uzatish protokoli juda sodda va aslida smenali registrning mantig'iga o'xshaydi, bu almashtirish ishini bajarish va shunga mos ravishda ma'lumotlarning bittadan bittadan kirishi va chiqarilishidan iborat. sinxronizatsiya signali. Ma'lumotlar to'plamini uzatish va qabul qilish har doim soatning qarama-qarshi tomonlarida amalga oshiriladi. Bu ma'lumotlar ishonchli tarzda o'rnatilgandan so'ng namuna olishni ta'minlash uchun zarur. Agar ko'tarilgan yoki tushgan chekka uzatish davridagi birinchi chekka rolini bajarishi mumkinligini hisobga olsak, u holda SPI interfeysi mantig'ining to'rtta varianti mavjud. Ushbu parametrlar SPI rejimlari deb nomlanadi va ikkita parametr bilan tavsiflanadi:
CPOL - bu sinxronizatsiya signalining boshlang'ich darajasi (agar CPOL = 0 bo'lsa, u holda uzatish tsikli boshlanishidan oldin va uning tugashidan keyin past darajadagi sinxronizatsiya chizig'i (ya'ni, birinchi chekka ko'tarilib, oxirgisi pasaymoqda) , aks holda, agar CPOL = 1 bo'lsa, u yuqori (ya'ni birinchi old tushadi, ikkinchisi ko'tariladi));
CPHA - sinxronizatsiya bosqichi; ushbu parametr sozlamalar va ma'lumotlar namunalarini olish ketma-ketligini belgilaydi (agar CPHA = 0 bo'lsa, unda ma'lumotlar namuna olish sinxronizatsiya tsiklining etakchisida, so'ngra tushgan chekkada ma'lumotlar sozlamalari amalga oshiriladi; agar CPHA = 1 bo'lsa , keyin sozlash ma'lumotlari soat tsiklining etakchisida bajariladi va tushgan tomonida namuna olinadi). SPI rejimlari to'g'risidagi ma'lumotlar 2-jadvalda umumlashtirilgan.
Turli xil SPI rejimlarida ishlaydigan usta va xizmatchilarning IClari mos kelmaydi, shuning uchun qul IClarini tanlashdan oldin, master avtobus tomonidan qaysi rejimlar qo'llab-quvvatlanishiga aniqlik kiritish kerak. Mikrokontrollaga o'rnatilgan SPI apparat modullari ko'p hollarda har qanday SPI rejimini tanlash imkoniyatini qo'llab-quvvatlaydi va shuning uchun har qanday qul SPI mikrosxemalari ularga ulanishi mumkin (faqat mustaqil ulanish opsiyasiga tegishli). Bundan tashqari, har qanday rejimdagi SPI protokoli dasturiy ta'minotda osonlikcha amalga oshiriladi.
Do'stlaringiz bilan baham: |