CYW20719支持SPI接口與其他SPI設備通信。 該模塊可用於與基於spi的傳感器(如溫度傳感器、運動傳感器等)通信。 SPI支持以下特性:
- 三線(主從)和四線(主從)SPI接口
- 主從模式
- 可配置的SCK極性和相位
- 可配置LSB-First或MSB-First傳輸
- 1024字節發送緩衝區和1024字節接收緩衝區(與HCI UART共享)
CYW20719提供SPI API來選擇2個SPI硬體塊。 spi_interface_t允許程序員在SPI1和SPI2之間進行選擇。 每個SPI實用程序API將有一個參數在兩個SPI塊之間進行選擇。
SPI塊可以用作通用的SPI Master或通用的SPI Slave。 任何LHL GPIO都可以用於SPI接口。 ModusToolbox提供了訪問SPI 1驅動程序的參數和API列表。 在ModusToolbox IDE中,左下角Documentation中WICED Bluetooth SDK Documentation”,並在“Components-->Hardware Drivers”下找到“Peripheral SPI”部分。
SPI 配置的圖形界面
使用函數wiced_hal_pspi_init()在所需的配置中初始化SPI模塊。
1.1 通用的SPI Slave操作
TX操作
當作為一個通用的slave,數據在以下情況下被傳輸到主機:
1).Tx FIFO中有數據 ;
2).啟用Tx FIFO ;
3).主機切換SPI_CLK,並斷言SPI_CSN ;
如果條件(1)為假,但條件(2)和(3)為真,則出現數據下溢情況。 傳輸API可以在Tx FIFO中放置數據。 可以使用wiced_hal_pspi_slave_tx_data() API傳輸數據。
RX操作
作為一個通用的slave,當以下情況時從主機接收數據:
1). Rx FIFO中還有空間 ;
2). Rx FIFO使能 ;
3).主機發送SPI_CLK,並拉低SPI_CSN
如果條件(1)為假,但條件(2)和條件(3)為真,則發生數據溢出。 可以使用手動固件讀取從Rx FIFO檢索數據。 可以使用wiced_hal_pspi_slave_rx_data() API接收數據。
1.2 一般SPI Master操作
在通用主模式下,根據不同的外設選擇不同的CS。 在主模式下,CS和INT引腳可以用作GPIO。 有三種類型的SPI Master可用。
TX-Only
當只需要發送數據時,SPI塊為TX-Only模式。 在這種模式下:
1). 必須使能Tx FIFO
2). 必須禁用Rx FIFO
在這個配置中,SPI塊將傳輸Tx FIFO中放置的任何數據。 通過手動寫入FW,可以將數據放入Tx FIFO中。 可以使用wiced_hal_pspi_tx_data() API作為主服務器傳輸數據。
當Tx FIFO變為空時,SPI_CLK將在字節邊界處暫停,直到將更多的數據放入Tx FIFO。 Rx FIFO中不存儲數據。
RX-Only
當只需要接收數據時,SPI塊為RX-Only模式。 在這種模式下:
1). 必須禁用Tx FIFO
2). 必須使能Rx FIFO
在這個配置中,SPI將從Slave檢索TransmissionLength字節。 可以使用手動固件讀取從Rx FIFO檢索數據。 可以使用wiced_hal_pspi_rx_data() API接收主數據。
如果Rx FIFO被填滿,數據流將被暫停。 當Rx FIFO中有空間時,數據流將恢復。 此模式下不發送任何數據。
Full-Duplex
當需要同時發送和接收數據時,SPI處於全雙工模式。
在這種模式下:
1). Tx FIFO啟用
2). Rx FIFO啟用
在這個配置中,如果有數據,SPI將數據傳輸到兩個FIFO:
1). Rx FIFO有空間
2). 數據Tx FIFO
如果其中任何一個條件為假,SPI_CLK將暫停,直到兩個條件再次為真。 可以使用wiced_hal_pspi_exchange_data() API同時發送和接收數據。
注意: 由於SPI和HCI UART使用相同的緩衝區,它們不能一起使用。
評論