一:spi通信的主要函數
1,int wiringPiSPI(int channel,int speed); 選擇一個spi通道(通道0和通道1)進行初始化,設置spi的傳輸速度(5*1000*100-32*1000*1000),執行失敗返回-1
2,int wiringPiSPIDataRW(int channel,unsigned char *data,int len);
該函數執行一個同時讀寫的操作,通過選定的SPI總線。在data中的數據發送出去的時候,data中同時接收從總線中接收到的數據。
3,int wiringPiSPISetupMode(int channel,int speed,int mode); //增加了可以設置SPI的通信模式
給定一個spi總線,將緩衝區的數據寫到
二:實驗現象
本實驗主要是將spi的MISO和MOSI通過短接線短接起來檢測數據是否傳輸正常:
當將數據線短接時:有數據產生,反之沒有數據。
二:實驗步驟
1,sudo raspi-config彈出系統配置對話框,使能spi,重新啓動樹莓派,內核加載成功
2,編寫測試程序
(1),初始化wiringPI庫;wiringPISetup函數
(2),初始化SPI總線;wiringPiSPiSetup函數
(3),從總線中讀寫數據;wiringPiSPIDataRW函數
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <wiringPiSPI.h>
//spi使用前的準備 返回spi的文件描述符
int initSPI()
{
int spiFd; //spi的文件描述符
//初始化所用到的IO引腳
//初始化SPI通道0,並設置爲最大速度32000000
spiFd=wiringPiSPISetup(0,500000);
if(spiFd==-1)
{
printf("init spi failed!\n");
}
}
int main()
{
char Data[10]={1,2,3,4,5,6,7,8,9,10}; //定義讀寫的數據,在該數據被寫入的時候,同時也從總線中讀出數據
int i=0;
//初始化wiringPI的庫函數
if(wiringPiSetup()<0)
{
printf("init wiringPi error\n");
}
initSPI(); //spi的初始化
while(1)
{
wiringPiSPIDataRW(0,Data,7); //向總線中寫入&個數據
printf("read spi data is:\n"); //讀出總線的數據
//打印讀出的數據,如果將MISO和MOSI短接:打印出 0 1 2 3 4 5 6 7 8 9 10 其中後三個是數組的本身內容 接收到了數據
//如果將MISO和MOSI斷開:打印出 0 0 0 0 0 0 0 0 8 9 10 沒有接收到數據
for(i=0;i<10;i++)
{
printf("%d\n",Data[i]);
}
printf("\n");
delay(1000);
}
return 0;
}
實驗現象
spi的MISO和MOSI短接
spi的MISO和MOSI斷開
博文索引 持續更新中。。。