class SPI – פרוטוקול סדרתי מונע בקר¶
SPI הוא פרוטוקול סדרתי סינכרוני המונע על ידי בקר. ברמה הפיזית הוא משתמש בשלושה קווים (SCK, MOSI, MISO) בתוספת קו chip-select לכל התקן היקפי.
השימוש דומה ל-I2C; ההבדל העיקרי הוא הפרמטרים המועברים בעת אתחול האפיק:
from pyb import SPI
spi = SPI(2, SPI.CONTROLLER, baudrate=600000, polarity=1, phase=0, crc=0x7)
הפרמטר היחיד הנדרש הוא mode (SPI.CONTROLLER או SPI.PERIPHERAL). polarity הוא רמת המנוחה של SCK (0 או 1). phase בוחר אם הנתונים נדגמים בקצה השעון הראשון (0) או השני (1). crc הוא או None (ללא CRC) או פולינום CRC.
העברת נתונים:
data = spi.send_recv(b"1234") # send 4 bytes and receive 4 bytes
buf = bytearray(4)
spi.send_recv(b"1234", buf) # send 4 bytes and receive 4 into buf
spi.send_recv(buf, buf) # send/receive 4 bytes through buf
בנאים¶
- class pyb.SPI(bus: int | str, *args, **kwargs)¶
בניית אובייקט SPI על האפיק
busהנתון (אינדקס שלם של התקן היקפי SPI, לדוגמה2עבורSPI2). ללא פרמטרים נוספים האובייקט נוצר אך לא מאותחל (הוא שומר על הגדרות האפיק הקודמות, אם קיימות); אם ניתנים ארגומנטים נוספים האפיק מאותחל איתם. ראוinit()לפרמטרים הזמינים.SPI(2)מחווט לאותם פיני מחבר בכל OpenMV Cam מבוססת STM32; ה-OpenMV Cam N6 חושפת בנוסף אתSPI(4):אפיק
NSS
SCK
MISO
MOSI
SPI(2)(כל מצלמות OpenMV Cam מבוססות STM32)P3P2P1P0SPI(4)(OpenMV Cam N6 בלבד)P15P16P17P18NSSאינו מונע על ידי ההתקן ההיקפי SPI באף אחד מהאפיקים; הוא חופשי לשימוש כ-chip-select רגיל מסוג GPIO.מתודות¶
- init(mode: int, baudrate: int = 328125, *, prescaler: int = -1, polarity: int = 1, phase: int = 0, bits: int = 8, firstbit: int = SPI.MSB, ti: bool = False, crc: int | None = None) None¶
אתחול אפיק ה-SPI עם הפרמטרים הנתונים:
modeחייב להיות אוSPI.CONTROLLERאוSPI.PERIPHERAL.baudrateהוא קצב שעון ה-SCK (הגיוני רק עבור בקר).prescalerהוא מחלק התדר (prescaler) לגזירת SCK מתדר אפיק ה-APB; שימוש ב-prescalerעוקף אתbaudrate.polarityיכול להיות 0 או 1, והוא הרמה שבה נמצא קו השעון במנוחה.phaseיכול להיות 0 או 1 לדגימת נתונים בקצה השעון הראשון או השני בהתאמה.bitsיכול להיות 8 או 16, והוא מספר הסיביות בכל מילה מועברת.firstbitיכול להיותSPI.MSBאוSPI.LSB.tiTrue מציין מוסכמות אותות של Texas Instruments, להבדיל מ-Motorola.crcיכול להיות None ללא CRC, או מציין פולינום.
תדר שעון ה-SPI עשוי שלא להתאים ל-
baudrateבמדויק. החומרה תומכת רק בשעונים שהם תדר אפיק ה-APB ההורה מחולק במחלק תדר שהוא חזקה של שתיים (2, 4, 8, 16, 32, 64, 128או256); הנהג בוחר את הגבוה ביותר שאינו חורג מה-baudrateהמבוקש.SPI(2)נמצא על APB1. לשליטה מדויקת על השעון, הגדירו אתprescalerישירות במקום אתbaudrate.הדפסת אובייקט ה-SPI מציגה את קצב הבָּאוּד המחושב ואת מחלק התדר הנבחר.
- recv(recv: int | bytearray, *, timeout: int = 5000) bytes¶
קבלת נתונים על האפיק:
recvיכול להיות מספר שלם, שהוא מספר הבייטים לקבלה, או חוצץ (buffer) בר-שינוי, שיתמלא בבייטים שהתקבלו.timeoutהוא ההשהיה במילישניות להמתנה לקבלה.
ערך החזרה: אם
recvהוא מספר שלם אז חוצץ חדש של הבייטים שהתקבלו, אחרת אותו חוצץ שהועבר ל-recv.
- send(send: int | bytes | bytearray, *, timeout: int = 5000) None¶
שליחת נתונים על האפיק:
sendהם הנתונים לשליחה (מספר שלם לשליחה, או אובייקט חוצץ).timeoutהוא ההשהיה במילישניות להמתנה לשליחה.
- send_recv(send: int | bytes | bytearray, recv: bytearray | None = None, *, timeout: int = 5000) bytes¶
שליחה וקבלה של נתונים על האפיק בו-זמנית:
sendהם הנתונים לשליחה (מספר שלם לשליחה, או אובייקט חוצץ).recvהוא חוצץ בר-שינוי שיתמלא בבייטים שהתקבלו. הוא יכול להיות זהה ל-send, או להיות מושמט. אם מושמט, ייווצר חוצץ חדש.timeoutהוא ההשהיה במילישניות להמתנה לקבלה.
ערך החזרה: החוצץ עם הבייטים שהתקבלו.
קבועים¶
- CONTROLLER: int¶
אתחול אפיק ה-SPI כ-master (בקר) – ה-OpenMV Cam נוהג את
SCKו-MOSIוהוא האחראי על הטרנזקציה.