【树莓派5测评】 17.树莓派SPI测试(2)
本帖最后由 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;
uint8_t rx_buffer;
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语言的话,这种方式也挺不错的。
页:
[1]