樹莓派spi通信

一: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斷開



博文索引  持續更新中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章