树莓派 spi调试
1.打开SPI
1.1 初次启动系统spi未打开 ,未发现SPI设备节点:ls -l /dev
1.2打开spi:sudo raspi-config
1.3 再次查看,spi 打开:ls -l /dev
2.wiringPi 相关的SPI库函数:
int wiringPiSPI(int channel,int speed); 选择一个spi通道(通道0和通道1)进行初始化,设置spi的传输速度(51000100-3210001000),执行失败返回-1;
int wiringPiSPIDataRW(int channel,unsigned char *data,int len);
该函数执行一个同时读写的操作,通过选定的SPI总线。在data中的数据发送出去的时候,data中同时接收从总线中接收到的数据,即:data既是发送缓存区同时也是接受缓冲区,主机发送时,同一个时钟的另一个边沿接收的数据从data的起始位置开始存放。
int wiringPiSPISetupMode(int channel,int speed,int mode); //增加了可以设置SPI的通信模式;
3.pc端spi模拟软件开启从机模式,树莓默认主机模式,发送9个字符:
3.1 主机端代码:
其中,wiringPiSPISetup()函数调用了wiringPiSPISetupMode()默认设置模式0,数据长度8bit,但是从机端必须是模式11,否则通信失败。 由此可见,主从机的模式定义是不同的
3.2从机配置:
3.3收发情况:主机发送9个字符给从机,从机收到123456789,同时主机接收到9个空字符,因为从机没有发送实际数据给主机时,从机发送的是空字符,即空白,即在这每个时钟的两个边沿时刻(下降沿和上升沿)分别触发主机的收和发,所以第一个字符串“123456789"发送完同时接收到9个空白数据,那么打印tx缓存区时候,都是空白,前9个被空白覆盖,下次主机发送的是:9个空白。主机是:边发边收; 从机是“边收边发”
4.pc端spi模拟软件开启从机模式,树莓默认主机模式,发送5个字符:
4.1 主机端代码:
4.2收发情况:主机发送5个字符给从机,从机收到12345,同时主机接收到5个空字符,因为没有发送实际数据给主机时,从机发送的是空字符,即空白,即在这每个时钟的两个边沿时刻(下降沿或者上升沿)分别触发主机的收和发,所以第一个字符串“12345"发送完同时接收到5个空白数据,那么打印tx缓存区时候,都是空白,前5个被空白覆盖,下次主机发送的是:5个空白+6789。主机是:边发边收; 从机是“边收边发”
- pc端spi模拟软件开启从机模式,树莓默认主机模式,发送9个字符:
5.1 SPI初始之后可以调用通用读写函数read()、write()发送和接收报文,这样就不需要同一个缓存区即用作接收又用作发送。
主机代码:
5.2收发情况:主程序不断发送123456789,同时从机一直发送空字符,即从机没有主动发送有效的数据。