esp32有四個spi外設,包含spi0、spi1、hspi和vspi。spi0完全專用於flash快取記憶體,esp32用於將spi快閃儲存器裝置對映到記憶體中。spi1是與spi0連線到相同的硬體線路上,用於寫入快閃儲存器晶元。hspi和vspi是使用者自由使用的。spi1、hspi和vspi都有三個晶元選擇線(cs),允許它們作為主機驅動多達三個spi裝置。
spi主機驅動允許使用者與spi從機自由通訊,包含多執行緒程式設計環境也是一樣。它完全透明地處理dma傳輸來讀取和寫入資料,並使用自動處理同一spi主機與匯流排上不同spi從機進行通訊。
注:暫時驅動中只實現了hspi和vspi。
全雙工模式下,spi同時傳送和接收,總長度 = command_bits +address_bits +trans_conf.length 。 trans_conf.rx_length指示的是接收到buff中的資料長度。
半雙工模式下,spi單獨傳送和接收。傳送長度為 trans_conf.length ,接收長度為trans_conf.rx_length 。
因為不是每個spi裝置都有命令和位址位,所以在配置中,command_bits為0時,沒有命令位;address_bits為0時,沒有位址位。
當 rx_buffer = null時(或者spi_use_rxdata 沒有設定時),不執行接收操作;當 tx_buffer = null時(或者spi_use_txdata 沒有設定時),跳過傳送操作。
spi介面有兩種io方式,一種是io復用功能,另外一種是gpio矩陣,因為gpio的輸入延遲比較高,io復用引腳可以實現80mhz速率,而gpio矩陣只能達到40mhz。
spi的復用io口
引腳名稱
hspi
vspi
引腳號引腳號
cs015
5sclk
1418
miso
1219
mosi
1323
quadwp222
quadhd
41、定義 bus_config 和 dev_config 結構體,指定使用的spi和io口,不用的訊號引腳設定為-1,以及設定時鐘速率等
例:
/* 定義spi裝置控制代碼 */
spi_device_handle_t spi;
/* 設定spi匯流排引腳配置 */
spi_bus_config_t buscfg=;
/* 設定spi匯流排軟體配置 */
spi_device_inte***ce_config_t devcfg=;
/* 初始化spi */
ret=spi_bus_initialize(hspi_host, &buscfg, 1);
esp_error_check(ret);
/* 例項化spi裝置控制代碼 */
ret=spi_bus_add_device(hspi_host, &devcfg, &spi);
esp_error_check(ret);
ESP32 學習記錄
首次接觸freertos和espressif的產品,例如我,那還是要先來個整體印象,然後再逐個深化。做專案的都知道,老闆們是不允許我們四平八穩的研究完然後再開始專案。那也不妨礙咱們要有自己的節奏,既要平衡專案的進度,也要按照事情的規律來做事情 這就需要快速的準備一些預備知識,磨刀不誤砍柴功,倉促上陣...
ESP32學習 外設 timer
typedef struct timer config t 定時器初始化結構體成員6個,從上到下依次是,中斷使能,計數使能,中斷模式,計數方向,自動過載,分頻係數。timer init timer group 0,timer 1,timerconfig 初始化結構體後,呼叫初始化函式,三個引數包括,...
ESP32學習 外設 UART
brief uart configuration parameters for uart param config function typedef struct uart config t esp32總共有三個串列埠分別是uart num0,uart num1,uart num2。串列埠0作為軟體...