[评测分享]
【树莓派5测评】 17.树莓派SPI测试(2)
#板卡评测
 
2081 人阅读
|
0 人回复
|
2024-04-05 
 
 
 
 
TA的每日心情  | 慵懒 2025-8-6 21:07 | 
|---|
 
  签到天数: 313 天 连续签到: 1 天 [LV.8]以坛为家I 
状元 
 
 
	- 积分
 - 5300
 
 
 
 
 | 
 
 
 本帖最后由 stm1024 于 2024-4-5 20:41 编辑  
 
前面介绍到了树莓派的SPI的硬件基础知识,以及通过spidev库进行SPI数据传输的功能,这次换一个C语言的库,进行SPI协议的测试。 
 
1. 软件库的下载和编译安装 
这里要用到的库是spidev-lib,地址是:https://github.com/milekium/spidev-lib,该库是在Python库(https://pypi.python.org/pypi/pyA20)基础上进行了封装,方便C/C++程序员。 
下载以后,放到树莓派下面,然后解压,进入主目录以后,操作如下: 
- mkdir build
 
 - cd build
 
 - cmake ..
 
 - make
 
 - sudo make install
 
  复制代码 一步步效果如下: 
 
 
 
 
 
软件的获取安装就完成了。 
 
2. 程序测试 
然后我们可以回到该安装包的主目录,我的是~/spidev-lib/,在该目录下有个sample文件夹,其中有两个示例代码,我们可以编译测试。 
但是在编译之前,我们要注意硬件的配置,以spidev-testc.c代码为例: 
 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
 - #include <string.h>
 
 - #include <spidev_lib.h>
 
  
- spi_config_t spi_config;
 
 - uint8_t tx_buffer[32];
 
 - uint8_t rx_buffer[32];
 
  
- void main( void)
 
 - {
 
 -   int spifd;
 
 -   spi_config.mode=0;
 
 -   spi_config.speed=1000000;
 
 -   spi_config.delay=0;
 
 -   spi_config.bits_per_word=8;
 
  
-   spifd=spi_open("/dev/spidev2.0",spi_config);
 
  
-   memset(tx_buffer,0,32);
 
 -   memset(rx_buffer,0,32);
 
 -   sprintf(tx_buffer,"hello world");
 
 -   printf("sending %s, to spidev2.0 in full duplex \n ",tx_buffer); 
 
 -   spi_xfer(spifd,tx_buffer,strlen(tx_buffer),rx_buffer,strlen(tx_buffer));
 
 -   printf("rx_buffer=%s\n",rx_buffer);
 
 -   spi_close(spifd); 
 
 -   }
 
 
  复制代码 注意第18行行:spifd=spi_open("/dev/spidev2.0",spi_config);由于我们前面通过ls /dev/spi*查看到只有两个SPI外设: 
/dev/spidev0.1 
/dev/spidev10.0 
如果细心的话,注意同步把第23行修改一下(我就没那么细心)。 
所以我们这里要把spidev2.0修改为spidev0.1,修改完成以后,通过如下代码编译: 
- gcc sample/spidev-testc.c -lspidev-lib -o spidev-testc
 
  复制代码 截图如下: 
 
可以看到,生成了一个名为spidev-testc的可执行文件,并被执行。 
如果执行的时候,同时打开逻辑分析仪,可以看到如下数据: 
 
 
显然,0x68 0x65 0x6c 0x6c 0x6f 分别是'h','e','l','l','o'对应的ASCII码。当然由于逻辑分析仪没有数据回发,所以程序中接收的数据是一直是0x00。 
one more thing:顺便看一下SCLK的周期,可以看到确实是恰好1MHz,这个和配置参数中是一样的: 
 
 
如果习惯C语言的话,这种方式也挺不错的。 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |