Nô lệ SPI

Mô-đun này bao gồm mô-đun trừu tượng nền tảng cho giao tiếp nô lệ SPI.

Tóm tắt

Typedef

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Cho biết rằng giao dịch SPI đã hoàn tất với độ dài đã cho.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Được gọi sau khi một lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE để thực hiện thêm mọi yêu cầu xử lý cần thiết.

Hàm

otPlatSpiSlaveDisable(void)
void
Tắt và vô hiệu hoá giao diện nô lệ SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Khởi động giao diện nô lệ SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Chuẩn bị dữ liệu cho giao dịch SPI tiếp theo.

Typedef

otPlatSpiSlaveTransactionCompleteCallback

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

Cho biết rằng giao dịch SPI đã hoàn tất với độ dài đã cho.

Dữ liệu được ghi vào nô lệ đã được ghi vào con trỏ mà đối số aInputBuf biểu thị tới lệnh gọi trước đó đến otPlatSpiSlavePrepareTransaction().

Sau khi hàm này được gọi, otPlatSpiSlavePrepareTransaction() sẽ không hợp lệ và phải được gọi lại để giao dịch tiếp theo hợp lệ.

Lưu ý rằng hàm này luôn được gọi ở cuối giao dịch, ngay cả khi otPlatSpiSlavePrepareTransaction() chưa được gọi. Trong những trường hợp như vậy, aOutputBufLenaInputBufLen sẽ bằng 0.

Hệ thống có thể gọi lệnh gọi lại này từ ngữ cảnh ISR. Giá trị trả về của hàm này cho biết liệu bạn có cần xử lý thêm hay không. Nếu TRUE được trả về, quá trình triển khai trình điều khiển spi-slave của nền tảng phải gọi lệnh gọi lại quy trình giao dịch (aProcessCallback đặt trong otPlatSpiSlaveEnable()). Khác với lệnh gọi lại này, lệnh gọi lại này phải được gọi từ cùng ngữ cảnh hệ điều hành mà mọi API/lệnh gọi lại OpenThread khác được gọi.

Thông tin chi tiết
Các tham số
[in] aContext
Con trỏ ngữ cảnh được truyền vào otPlatSpiSlaveEnable().
[in] aOutputBuf
Giá trị của aOutputBuf từ lệnh gọi gần nhất đến otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Giá trị của aOutputBufLen từ lệnh gọi gần nhất đến otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Giá trị của aInputBuf từ lệnh gọi gần nhất đến otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Giá trị của aInputBufLen từ lệnh gọi gần đây nhất đến otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Độ dài của giao dịch đã hoàn tất, tính bằng byte.
Trả về
TRUE nếu sau khi lệnh gọi này trả về, nền tảng sẽ gọi lệnh gọi lại quy trình aProcessCallback, FALSE nếu không có gì để xử lý và không cần gọi lệnh gọi lại quy trình.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Được gọi sau khi một lệnh gọi lại hoàn tất giao dịch được gọi và trả về TRUE để thực hiện thêm mọi yêu cầu xử lý cần thiết.

Không giống như otPlatSpiSlaveTransactionCompleteCallback có thể được gọi từ bất kỳ ngữ cảnh hệ điều hành nào (ví dụ: ISR), lệnh gọi lại này PHẢI được gọi từ cùng ngữ cảnh hệ điều hành như mọi API/lệnh gọi lại OpenThread khác.

Thông tin chi tiết
Các tham số
[in] aContext
Con trỏ ngữ cảnh được truyền vào otPlatSpiSlaveEnable().

Hàm

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Tắt và vô hiệu hoá giao diện nô lệ SPI.

otPlatSpiSlaveEnable

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

Khởi động giao diện nô lệ SPI.

Lưu ý rằng nô lệ SPI chưa hoàn toàn sẵn sàng cho đến khi giao dịch được chuẩn bị bằng otPlatSPISlavePrepareTransaction().

Nếu các byte otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` và loại bỏ tất cả các byte đã nhận.

Thông tin chi tiết
Các tham số
[in] aCompleteCallback
Con trỏ đến lệnh gọi lại hoàn tất giao dịch.
[in] aProcessCallback
Con trỏ để xử lý lệnh gọi lại.
[in] aContext
Con trỏ ngữ cảnh sẽ được truyền đến các lệnh gọi lại.
Giá trị trả về
OT_ERROR_NONE
Đã bật thành công giao diện SPI Slave.
OT_ERROR_ALREADY
Giao diện SPI Slave đã được bật.
OT_ERROR_FAILED
Không thể bật giao diện SPI Slave.

otPlatSpiSlavePrepareTransaction

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

Chuẩn bị dữ liệu cho giao dịch SPI tiếp theo.

Con trỏ dữ liệu PHẢI vẫn hợp lệ cho đến khi lệnh gọi lại hoàn tất giao dịch được trình điều khiển phụ kiện SPI gọi, hoặc cho đến sau lần gọi tiếp theo đến otPlatSpiSlavePrepareTransaction().

Có thể được gọi nhiều lần trước khi chủ SPI bắt đầu giao dịch. Mỗi lệnh gọi thành công đến hàm này sẽ khiến các giá trị trước đó của các lệnh gọi trước đó bị loại bỏ.

Việc không gọi hàm này sau khi giao dịch đã hoàn tất giống như khi hàm này được gọi trước đó với cả độ dài vùng đệm được đặt thành 0 và aRequestTransactionFlag được đặt thành false.

Khi aOutputBufLen byte của aOutputBuf đã được hết giờ, chân MISO sẽ được đặt ở mức cao cho đến khi máy chủ hoàn tất giao dịch SPI. Chức năng này tương đương với việc khoảng đệm phần cuối của aOutputBuf với 0xFF byte vào chiều dài giao dịch.

Sau khi các byte aInputBufLen của aInputBuf được tăng tốc độ từ MOSI, tất cả các giá trị tiếp theo từ chân MOSI sẽ bị bỏ qua cho đến khi tín hiệu chính SPI hoàn tất giao dịch.

Lưu ý rằng ngay cả khi aInputBufLen hoặc aOutputBufLen (hoặc cả hai) bị hết trước khi bản chính SPI hoàn tất giao dịch, bạn vẫn phải theo dõi kích thước giao dịch đang diễn ra để được truyền đến lệnh gọi lại hoàn tất giao dịch. Ví dụ: nếu aInputBufLen bằng 10 và aOutputBufLen bằng 20 và đồng hồ chủ SPI hết 30 byte, thì giá trị 30 sẽ được truyền đến lệnh gọi lại hoàn tất giao dịch.

Nếu một con trỏ NULL được truyền vào dưới dạng aOutputBuf hoặc aInputBuf, thì con trỏ vùng đệm đó sẽ không thay đổi so với giá trị trước đó/hiện tại. Trong trường hợp này, đối số độ dài tương ứng nên được bỏ qua. Ví dụ: otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) thay đổi con trỏ vùng đệm đầu vào và độ dài nhưng vẫn giữ nguyên con trỏ vùng đệm đầu ra như trước đây.

Bất kỳ lệnh gọi nào đến hàm này trong khi giao dịch đang diễn ra đều sẽ khiến tất cả đối số bị bỏ qua và giá trị trả về là OT_ERROR_BUSY.

Thông tin chi tiết
Các tham số
[in] aOutputBuf
Dữ liệu sẽ được ghi vào chân MISO
[in] aOutputBufLen
Kích thước của vùng đệm đầu ra, tính bằng byte
[in] aInputBuf
Dữ liệu được đọc từ mã pin MOSI
[in] aInputBufLen
Kích thước của vùng đệm nhập, tính bằng byte
[in] aRequestTransactionFlag
Đặt thành true nếu cần đặt gián đoạn của máy chủ
Giá trị trả về
OT_ERROR_NONE
Đã chuẩn bị giao dịch thành công.
OT_ERROR_BUSY
Hiện đang có một giao dịch.
OT_ERROR_INVALID_STATE
Hàm otPlatSpiSlaveEnable() chưa được gọi.

Tài nguyên

Các chủ đề tham khảo API OpenThread bắt nguồn từ mã nguồn, có trên GitHub. Để biết thêm thông tin hoặc để đóng góp cho tài liệu của chúng tôi, hãy tham khảo Tài nguyên.