Sizning pochtangizdagi "SPI Ma'lumotlarni Mutolaa" deb nomlangan rasmga kelsak, faqat for
= PCD_ReadRegister()
da amalga oshirilgan MISO orqali olingan birinchi bayt bekor qilinadi, pastadir va undan keyin n
baytlar o'qiladi, 0 sonni o'qishni to'xtatish uchun o'tkaziladi.
Kutubxona va ma'lumotlar sahifasiga tezkorlik bilan qaraganda, rxAlign
mustaqil o'zgaruvchisi birinchi olingan baytda birinchi joriy bitni aniqlashda ishlatilishini ko'rsatadi. txLastBits
, faqat oxirgi baytning uzatilishi uchun xuddi shunday maqsadga xizmat qiladi. Har ikkisi ham MFRC522 ning BitFramingReg
-ga yoziladi va MFRC522 va karta/tag orasida bit-yo'naltirilgan ramkalar uchun zarur.
Masalan, siz yuqorida mavjud bo'lgan funktsiyada, rxAlign = 3
bo'lsa, bu faqatgina bittadan bittadan bittasi bittadan niqob bilan chiqarilgan olingan baytda bittada emas > 11111000 . Shunday qilib, birinchi joriy 'byte' , keyingi qabul qilingan byte'ların bitlerinin 2 - 0'si bilan birleştirilen birinchi olingan baytın 7 dan 3'ünü tashkil etadi. Xuddi shunday, uzatishda txLastBits
kartaga/tagga uzatilishi kerak bo'lgan oxirgi baytlarning bitlarini bildiradi. Ikkala holatda ham, RF chastotasi orqali uzatilgan yoki qabul qilingan narsa 8 bo'lishi mumkin, shuning uchun bu argumentlarga va BitFramingReg
ga ehtiyoj bor.
Yaxshiyamki, bu kutubxonani ko'chirish bilan hech qanday aralashmasligi kerak. Arduinoga xos funktsiyalarni/interfeyslarni almashtirish va kutubxonaning mavjud mantiqiyligini saqlab qolish imkonini beradi.
EDIT -ni tanlang
Men sizning savollaringizga javob berishga harakat qilaman:
- Shu nuqtai nazardan, 106kBd RC522 va MCU o'rtasida emas, RC522 va karta orasidagi ma'lumotlar tezligiga ishora qiladi. Maksimal taxminan 848kBd, deb o'ylayman. Batafsil ma'lumot uchun ma'lumot sahifasini tekshiring.
- Blastlarga qarshi kurash jarayoni uchun bit yo'naltirilgan freymlar kerak . Bir nechta kartalar RC522 bilan bir vaqtning o'zida bog'lanish uchun harakat qilganda, Manchester kodlashda Superimposed bitlar odatiy byte-o'lchamli birliklardan farqli o'laroq, individual bitlarni qayta ishlashni talab qiladi. Qarama-qarshi to'qnashuvlarni tekshiring.
- Anticollision bir xil o'quvchi o'z diapazonida bir nechta tegga ega bo'lishi kerak. IEEE maqolasidan:
Tag to'qnashuvlari RFID tizimlarida katta samarasizligi keltirib chiqarishi mumkin, natijada past identifikatsiya stavkalari, qisqa o'qish oralig'i va samarasiz resurslardan foydalanish mumkin.
Power va funksionallik cheklovlari sababli passiv belgilarda muammolar mavjud
Shunday qilib, agar siz bir vaqtning o'zida bitta kartani taqdim qilmoqchi bo'lsangiz, kodingizda kutilmagan holni amalga oshirmasdan xavfsiz bo'lishingiz kerak. Boshqa tomondan, o'quvchini chalkashtirib yubormasangiz, sizda hech qanday tanlov yo'q deb qo'rqaman.
Agar xohlasangiz, UID-larni o'qib chiqing va kartadagi bloklardan o'qish (bir vaqtning o'zida) o'qishingiz mumkin bo'lsa, bu to'g'ridan to'g'ri MFRC522 UART kutubxonasi , bu esa anitcollisionni amalga oshirmaydi.
Agar siz hali ham SPI asosidagi kutubxonani portlashni xohlasangiz, unda bir nechta takliflar:
SPORT interfeysini UART bilan almashtirishni xohlaysiz. Bu PCD_ReadRegister()
, PCD_WriteRegister()
va bir nechta boshqa funktsiyalarda joylashgan past darajadagi materiallar. Ushbu funktsiyalar yuqori darajadagi funktsiyalarga xizmat qiladi, bu ularning ichki bajarilishiga oid hech qanday ma'lumotga ega emas, lekin ulardan ayrim xatti-harakatlar kutish kerak. UART orqali o'quvchi bilan qanday gaplashishni bilganingizdan so'ng, UARTning ekvivalentlari uchun SPI funktsiyalarini almashtiring. Sizning ARM UART funktsiyalari SPI funktsiyalariga o'xshash bo'lsa, ishingiz deyarli bajariladi; yuqori darajadagi funktsiyalardagi hamma narsani sababini o'rganishning hojati yo'q, chunki ular interfeysga xos bo'lgan narsalarga aloqasi yo'q. Bunga rxAlign
va unnot haqida hamma narsa kiradi. Omad :).