• 正文
    • 構建spi參數(shù)結構體
    • spi配置
    • spi發(fā)送函數(shù)
    • spi接收函數(shù)
    • 主函數(shù)main
    • 簡單spi回環(huán)測試代碼
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-spi編程示例之spi編寫程序

2024/11/06
1189
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

構建spi參數(shù)結構體

spi.h中同樣是構建了一個結構體,用來對spi進行配置:

spi部分對于需要的配置同樣是構建了一個結構體spi_param,便于對spi的最大速率,極性、相位,四線制還是兩線制等參數(shù)做詳細配置。

spi配置

這部分代碼結合前面構建的spi_param結構體,對結構體成員進行了設置,即完成了spi初始化。設置了SPI 工作模式。根據(jù)之前講解,SPI根據(jù)相位和極性的不同分為四 種工作模式,在這里四種工作模式為SPI_MODE_x (x = 0、1、2、3)。這里是回環(huán)測試,所以設置為任意一種工作模式都可以。需要注意的是我們可以分開設置SPI的讀、寫工作模式。

設置SPI通信過程中一個字節(jié)所占的位數(shù)。默認情況下設置為8即可。同樣,這里的讀、寫是分開設置的。設置SPI通信的波特率,這里設置為1M。經(jīng)過以上的配置,SPI已經(jīng)可以通信了。

spi發(fā)送函數(shù)

第一部分:定義并初始化SPI傳輸結構體。SPI傳輸結構體的完整定義如下所示:

結合注釋很容易理解,簡單說明如下:

(一)tx_buf為發(fā)送地址;

(二)rx_buf接收緩沖區(qū)地址為0,數(shù)據(jù)類型為“__u64”,兼容64位系統(tǒng),64位或32位 由系統(tǒng)自動處理,我們不必關心。len,一次傳輸?shù)臄?shù)據(jù)長度;

(三)speed_hz,指定SPI通信的比特率;

(四)delay_usecs,如果不為零則用于設置兩次傳輸之間的時間延遲;

(五)bits_per_word,指定字節(jié)長度,既一個字節(jié)占用多少比特;

(六)cs_change,取消 選中,如果設置為真,則在下次傳輸之前會取消選中當前的SPI設備,更新片選;

(七)tx_nbits,指定“寫”數(shù)據(jù)寬度,SPI 支持 1、2、4位寬度,不過我們使用的SPI3只支持1位數(shù)據(jù)寬度,該值應當設置為1或0(設置為0表示使用默認的寬度既寬度為1)。

(八)pad參數(shù)我們沒有用到,不用設置;

第二部分:調(diào)用ioctl執(zhí)行發(fā)送,參數(shù)fd,是SPI設備文件描述符,參數(shù)SPI_IOC_MESSAGE(1)用于指定執(zhí) 行傳輸次數(shù),我們這里只定義并初始化了一個傳輸結構體tr,所以傳輸次數(shù)為1。tr 是第一部分設置的傳輸結構體變量。

spi接收函數(shù)

spi接收的函數(shù)和發(fā)送函數(shù)基本相同,唯一區(qū)別就是我們不再將接收緩沖區(qū)地址設為0。

主函數(shù)main

第一部分:tx_buffer是發(fā)送緩沖區(qū),rx_buffer是接收緩沖區(qū)。

第二部分:在main函數(shù)中依次調(diào)用函數(shù)spi_init初始化SPI、調(diào)用函數(shù)transfer執(zhí)行發(fā)送。最后分別打印tx_buffer和rx_buffer的內(nèi)容,正常情況下,程序運行后我們可以在控制終端發(fā)現(xiàn)tx_buffer和rx_buffer的內(nèi)容一致。

簡單spi回環(huán)測試代碼

這段代碼是用SPI進行回環(huán)測試的程序。讓我們分解代碼的每個部分:

第一部分:在這部分,包含了一些必要的頭文件,并定義了一些全局變量和結構體。具體來說,`struct_spi_param`是一個結構體,用于保存與SPI通信相關的各種參數(shù)。

第二部分:這部分包含了`func_set_opt`函數(shù)的實現(xiàn),該函數(shù)負責初始化SPI設備。它打開SPI設備文件(`/dev/spidev1.0`)以讀寫模式,并使用`ioctl`系統(tǒng)調(diào)用來設置各種SPI參數(shù)。

第三部分:這部分包含了`func_transfer`函數(shù)的實現(xiàn),該函數(shù)負責通過SPI總線傳輸數(shù)據(jù)。它使用`ioctl`系統(tǒng)調(diào)用和`SPI_IOC_MESSAGE`命令來執(zhí)行SPI數(shù)據(jù)傳輸。

第四部分:`main`函數(shù)是程序的入口點。它將`send_num`變量設置為38,然后調(diào)用`func_set_opt`來配置SPI設備。接著,它調(diào)用`func_transfer`來發(fā)送和接收數(shù)據(jù),并使用預定義的`transfer_tx`和`transfer_rx`緩沖區(qū)。最后,它打印接收到的數(shù)據(jù)長度,并關閉SPI設備。

下面是代碼的大致執(zhí)行過程:

(一)定義了`struct_spi_param`結構體,用于保存SPI參數(shù),并用默認值初始化一個實例(`spi_param`)。

(二)定義了兩個函數(shù):`func_set_opt`和`func_transfer`。

(1)`func_set_opt`函數(shù)初始化SPI設備,它打開設備文件并設置SPI模式、數(shù)據(jù)位數(shù)和速率。

(2)`func_transfer`函數(shù)通過SPI總線傳輸數(shù)據(jù),使用`ioctl`系統(tǒng)調(diào)用和`SPI_IOC_MESSAGE`命令來執(zhí)行SPI數(shù)據(jù)傳輸。

(3)`main`函數(shù)將`send_num`設置為38,并調(diào)用`func_set_opt`來配置SPI設備。

(4)`main`函數(shù)接著調(diào)用`func_transfer`來發(fā)送和接收數(shù)據(jù),使用預定義的`transfer_tx`和`transfer_rx`緩沖區(qū)。

(5)最后,`main`函數(shù)打印接收到的數(shù)據(jù)長度,并關閉SPI設備。

飛凌嵌入式

飛凌嵌入式

保定飛凌嵌入式技術有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設計和生產(chǎn)的高新技術企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設有華東、華南技術服務中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務網(wǎng)絡。公司研發(fā)的智能設備核心平臺廣泛應用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領域。

保定飛凌嵌入式技術有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設計和生產(chǎn)的高新技術企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設有華東、華南技術服務中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務網(wǎng)絡。公司研發(fā)的智能設備核心平臺廣泛應用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機器人、環(huán)境監(jiān)測等諸多領域。收起

查看更多

相關推薦