ทาส SPI

โมดูลนี้มีนามธรรมของแพลตฟอร์มสําหรับการสื่อสารเกี่ยวกับทาส SPI

สรุป

ประเภทคําจํากัดความ

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) Typedef
bool(*
บ่งบอกว่าธุรกรรม SPI เสร็จสมบูรณ์ตามความยาวที่กําหนดไว้
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) Typedef
void(*
มีการเรียกใช้หลังจากมีการเรียกโค้ดเรียกกลับที่เสร็จสมบูรณ์และส่งกลับ TRUE เพื่อดําเนินการเพิ่มเติมที่จําเป็น

ฟังก์ชัน

otPlatSpiSlaveDisable(void)
void
ปิดและปิดอินเทอร์เฟซทาส SPI
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
เริ่มต้นอินเทอร์เฟซ SPI ของ SPI
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
เตรียมข้อมูลสําหรับธุรกรรม SPI ถัดไป

ประเภทคําจํากัดความ

otPlatSpiSlaveTransactionเสร็จสมบูรณ์การโทรกลับ

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

บ่งบอกว่าธุรกรรม SPI เสร็จสมบูรณ์ตามความยาวที่กําหนดไว้

ระบบเขียนข้อมูลที่ไปยังทาสไปยังตัวชี้ที่ระบุโดยอาร์กิวเมนต์ aInputBuf ไปยังการเรียกก่อนหน้าไปยัง otPlatSpiSlavePrepareTransaction()

เมื่อมีการเรียกใช้ฟังก์ชันนี้ otPlatSpiSlavePrepareTransaction() ไม่ถูกต้องและต้องเรียกใช้อีกครั้งเพื่อให้ธุรกรรมถัดไปถูกต้อง

โปรดทราบว่าระบบจะเรียกใช้ฟังก์ชันนี้เสมอเมื่อสิ้นสุดธุรกรรม แม้ว่ายังไม่ได้เรียกใช้ otPlatSpiSlavePrepareTransaction() ก็ตาม ในกรณีเช่นนี้ aOutputBufLen และ aInputBufLen จะเป็น 0

โค้ดเรียกกลับนี้สามารถเรียกใช้ได้จากบริบทของ ISR ค่าการแสดงผลจากฟังก์ชันนี้เป็นการระบุว่าต้องมีการประมวลผลเพิ่มเติมหรือไม่ หากมีการส่งคืน TRUE การใช้งานไดรเวอร์ Spi Slave แพลตฟอร์มจะต้องเรียกโค้ดเรียกกลับของกระบวนการธุรกรรม (aProcessCallback ที่ตั้งค่าไว้ใน otPlatSpiSlaveEnable()) ซึ่งแตกต่างจากการเรียกกลับนี้ต้องเรียกจากบริบทของระบบปฏิบัติการเดียวกันกับที่มีการเรียกใช้ OpenThread API/callback อื่นๆ

รายละเอียด
พารามิเตอร์
[in] aContext
ส่งตัวชี้บริบทไปยัง otPlatSpiSlaveEnable() แล้ว
[in] aOutputBuf
ค่าของ aOutputBuf จากการโทรครั้งล่าสุดไปที่ otPlatSpiSlavePrepareTransaction()
[in] aOutputBufLen
ค่าของ aOutputBufLen จากการโทรครั้งล่าสุดไปที่ otPlatSpiSlavePrepareTransaction()
[in] aInputBuf
ค่าของ aInputBuf จากการเรียกครั้งล่าสุดไปยัง otPlatSpiSlavePrepareTransaction()
[in] aInputBufLen
ค่าของ aInputBufLen จากการเรียกครั้งล่าสุดไปยัง otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
ความยาวของธุรกรรมที่เสร็จสมบูรณ์ หน่วยเป็นไบต์
การคืนสินค้า
มีค่าเป็น TRUE หากหลังจากการเรียกนี้กลับมา แพลตฟอร์มควรเรียกใช้ aProcessCallback

OTPlatSpiSlaveTransactionProcessback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

มีการเรียกใช้หลังจากมีการเรียกโค้ดเรียกกลับที่เสร็จสมบูรณ์และส่งกลับ TRUE เพื่อดําเนินการเพิ่มเติมที่จําเป็น

แตกต่างจาก otPlatSpiSlaveTransactionCompleteCallback ซึ่งเรียกใช้ได้จากบริบทของระบบปฏิบัติการ (เช่น ISR) การเรียกนี้ต้องเรียกจากบริบทของระบบปฏิบัติการเดียวกันกับ OpenThread API/backback อื่นๆ

รายละเอียด
พารามิเตอร์
[in] aContext
ส่งตัวชี้บริบทไปยัง otPlatSpiSlaveEnable() แล้ว

ฟังก์ชัน

OTPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

ปิดและปิดอินเทอร์เฟซทาส SPI

OTPlatSpiSlave เปิดใช้

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

เริ่มต้นอินเทอร์เฟซ SPI ของ SPI

โปรดทราบว่าทาส SPI อาจไม่พร้อมใช้งานจนกว่าธุรกรรมจะจัดเตรียมโดยใช้ otPlatSPISlavePrepareTransaction()

หากเป็น otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` ไบต์ และทิ้งไบต์ที่ได้รับทั้งหมด

รายละเอียด
พารามิเตอร์
[in] aCompleteCallback
ชี้ไปที่โค้ดเรียกกลับของธุรกรรมเสร็จสมบูรณ์
[in] aProcessCallback
ตัวชี้เพื่อโทรกลับ
[in] aContext
ตัวระบุบริบทที่จะส่งไปยังโค้ดเรียกกลับ
แสดงผลค่า
OT_ERROR_NONE
เปิดใช้อินเทอร์เฟซ SPI Slave เรียบร้อยแล้ว
OT_ERROR_ALREADY
เปิดใช้อินเทอร์เฟซ SPI Slave แล้ว
OT_ERROR_FAILED
เปิดใช้อินเทอร์เฟซ SPI Slave ไม่สําเร็จ

OTPlatSpiSlave กําลังเตรียมธุรกรรม

otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

เตรียมข้อมูลสําหรับธุรกรรม SPI ถัดไป

ตัวชี้ข้อมูลต้องยังคงใช้งานได้จนกว่าการเรียกการตอบกลับ SPI ของ SPI จะเรียกใช้การเรียกเสร็จสมบูรณ์หรือจนกว่าจะเรียกใช้ otPlatSpiSlavePrepareTransaction() ครั้งถัดไป

อาจมีการเรียกฟังก์ชันนี้มากกว่า 1 ครั้งก่อนที่ SPI หลักจะเริ่มทําธุรกรรม การเรียกฟังก์ชันนี้ที่สําเร็จจะทําให้ระบบยกเลิกค่าก่อนหน้าจากการเรียกใช้ก่อนหน้านี้

การไม่เรียกใช้ฟังก์ชันนี้หลังจากธุรกรรมที่เสร็จสมบูรณ์จะเหมือนกับว่าฟังก์ชันนี้ได้เรียกใช้ไปแล้วก่อนหน้านี้ โดยมีความยาวของบัฟเฟอร์ทั้ง 0 และ aRequestTransactionFlag เป็น false

เมื่อ aOutputBufLen ไบต์ของ aOutputBuf หมดเวลาแล้ว ระบบจะปักหมุด PIN ของ MISO ไว้จนกว่าหลักจะทําธุรกรรม SPI เสร็จ ฟังก์ชันการทํางานนี้เทียบเท่ากับฟังก์ชันระยะห่างจากขอบของ aOutputBuf คือ 0xFF ไบต์โดยไม่จํากัดความยาวของธุรกรรม

เมื่อ AทางBuf ติดตั้งได้ aInputBufLen ไบต์จาก MOSI แล้ว ค่าที่ตามมาทั้งหมดจาก PIN ของ MOSI จะถูกละเว้นจนกว่าต้นแบบ SPI จะเสร็จสิ้นธุรกรรม

โปรดทราบว่าแม้ว่า aInputBufLen หรือ aOutputBufLen (หรือทั้ง 2 อย่าง) จะหมดแล้วก่อนที่ SPI หลักจะทําธุรกรรมเสร็จ แต่ระบบยังต้องติดตามขนาดธุรกรรมต่อไปเพื่อให้โค้ดเรียกกลับที่สมบูรณ์ของธุรกรรม เช่น หาก aInputBufLen เท่ากับ 10 และ aOutputBufLen เท่ากับ 20 และ SPI หลักจะแสดงเวลา 30 ไบต์ ระบบจะส่งค่า 30 ไปยังโค้ดเรียกกลับที่สมบูรณ์ของธุรกรรม

หากส่งตัวชี้ NULL เป็น aOutputBuf หรือ aInputBuf แสดงว่าตัวระบุบัฟเฟอร์ไม่ควรเปลี่ยนแปลงจากค่าก่อนหน้า/ปัจจุบัน ในกรณีนี้ ควรละเว้นอาร์กิวเมนต์ความยาวที่เกี่ยวข้อง ตัวอย่างเช่น otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) จะเปลี่ยนตัวชี้บัฟเฟอร์อินพุตและความยาวของตัวชี้ แต่คงตัวชี้บัฟเฟอร์เอาต์พุตไว้เหมือนเดิม

การเรียกฟังก์ชันนี้ขณะทําธุรกรรมจะเป็นการละเว้นอาร์กิวเมนต์ทั้งหมดและค่าการแสดงผลจะเป็น OT_ERROR_BUSY

รายละเอียด
พารามิเตอร์
[in] aOutputBuf
ข้อมูลที่จะเขียนลงใน PIN ของ MISO
[in] aOutputBufLen
ขนาดของบัฟเฟอร์เอาต์พุตในหน่วยไบต์
[in] aInputBuf
ข้อมูลที่อ่านได้จาก PIN ของ MOSI
[in] aInputBufLen
ขนาดของบัฟเฟอร์อินพุตในหน่วยไบต์
[in] aRequestTransactionFlag
ตั้งค่าเป็นจริงหากควรตั้งค่าการขัดข้องของโฮสต์
แสดงผลค่า
OT_ERROR_NONE
เตรียมการทําธุรกรรมเรียบร้อยแล้ว
OT_ERROR_BUSY
อยู่ระหว่างการทําธุรกรรม
OT_ERROR_INVALID_STATE
ไม่เคยถูกเรียก otPlatSpiSlaveEnable()

แหล่งข้อมูล

หัวข้ออ้างอิง OpenThread API มาจากซอร์สโค้ดซึ่งมีอยู่ใน GitHub ดูข้อมูลเพิ่มเติมหรือมีส่วนร่วมในเอกสารประกอบของเราได้ที่แหล่งข้อมูล