ทาส SPI

โมดูลนี้ประกอบด้วยกระบวนการ Abstraction ของแพลตฟอร์มสำหรับการสื่อสารลูกข่าย SPI

สรุป

Typedef

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
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
เตรียมข้อมูลสำหรับธุรกรรม SPI ครั้งถัดไป

Typedef

otPlatSpiSlaveTransactionCompleteCallback

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()) ซึ่งแตกต่างจากการเรียกกลับนี้จากบริบทระบบปฏิบัติการเดียวกับที่มีการเรียก API/การเรียกกลับ OpenThread อื่นๆ

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

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

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

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

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

ฟังก์ชัน

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

ปิดการทำงานและปิดใช้งานอินเทอร์เฟซลูกข่าย SPI

otPlatSpiSlaveEnable

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

เริ่มต้นอินเทอร์เฟซลูกข่าย 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 ไม่สำเร็จ

otPlatSpiSlavePrepareTransaction

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

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

ตัวชี้ข้อมูล "ต้อง" ยังใช้ได้อยู่จนกว่าผู้ขับรถทาส SPI จะเรียกใช้ตัวเรียกกลับสำหรับธุรกรรม หรือจนกว่าจะเรียกไปยัง otPlatSpiSlavePrepareTransaction() ครั้งถัดไป

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

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

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

เมื่อต่อนาฬิกาของ aInputBuf จำนวน 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()

แหล่งข้อมูล

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