TA的每日心情 | 慵懒 昨天 20:45 |
---|
签到天数: 184 天 连续签到: 4 天 [LV.7]常住居民III
|
本帖最后由 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语言的话,这种方式也挺不错的。
|
|