树莓派 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。主机是:边发边收; 从机是“边收边发”
在这里插入图片描述

  1. pc端spi模拟软件开启从机模式,树莓默认主机模式,发送9个字符:
    5.1 SPI初始之后可以调用通用读写函数read()、write()发送和接收报文,这样就不需要同一个缓存区即用作接收又用作发送。
    主机代码:
    在这里插入图片描述
    5.2收发情况:主程序不断发送123456789(注意:此处的123456789并未像采用wiringPiSPIDataRW那样被改变,而是一直保持123456789),同时从机一直发送空字符(即从机没有发送实际报文),即从机没有主动发送有效的数据。

    在这里插入图片描述

5.3 如果在5.2基础上,从机发送框内的字符串,主机可以不断采用read()这个非阻塞的函数收到该字符串的。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值