查看: 1278|回复: 0

[评测分享] 【树莓派5测评】 17.树莓派SPI测试(2)

[复制链接]
  • TA的每日心情
    慵懒
    昨天 20:45
  • 签到天数: 184 天

    连续签到: 4 天

    [LV.7]常住居民III

    发表于 2024-4-5 20:22:31 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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++程序员。
    下载以后,放到树莓派下面,然后解压,进入主目录以后,操作如下:
    1. mkdir build
    2. cd build
    3. cmake ..
    4. make
    5. sudo make install
    复制代码
    一步步效果如下:
    22.jpg


    23.jpg


    24.jpg

    软件的获取安装就完成了。

    2. 程序测试
    然后我们可以回到该安装包的主目录,我的是~/spidev-lib/,在该目录下有个sample文件夹,其中有两个示例代码,我们可以编译测试。
    但是在编译之前,我们要注意硬件的配置,以spidev-testc.c代码为例:

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <spidev_lib.h>

    5. spi_config_t spi_config;
    6. uint8_t tx_buffer[32];
    7. uint8_t rx_buffer[32];

    8. void main( void)
    9. {
    10.   int spifd;
    11.   spi_config.mode=0;
    12.   spi_config.speed=1000000;
    13.   spi_config.delay=0;
    14.   spi_config.bits_per_word=8;

    15.   spifd=spi_open("/dev/spidev2.0",spi_config);

    16.   memset(tx_buffer,0,32);
    17.   memset(rx_buffer,0,32);
    18.   sprintf(tx_buffer,"hello world");
    19.   printf("sending %s, to spidev2.0 in full duplex \n ",tx_buffer);
    20.   spi_xfer(spifd,tx_buffer,strlen(tx_buffer),rx_buffer,strlen(tx_buffer));
    21.   printf("rx_buffer=%s\n",rx_buffer);
    22.   spi_close(spifd);
    23.   }
    复制代码
    注意第18行行:spifd=spi_open("/dev/spidev2.0",spi_config);由于我们前面通过ls /dev/spi*查看到只有两个SPI外设:
    /dev/spidev0.1
    /dev/spidev10.0
    如果细心的话,注意同步把第23行修改一下(我就没那么细心)。
    所以我们这里要把spidev2.0修改为spidev0.1,修改完成以后,通过如下代码编译:
    1. gcc sample/spidev-testc.c -lspidev-lib -o spidev-testc
    复制代码
    截图如下:
    88.jpg

    可以看到,生成了一个名为spidev-testc的可执行文件,并被执行。
    如果执行的时候,同时打开逻辑分析仪,可以看到如下数据:
    89.jpg


    显然,0x68 0x65 0x6c 0x6c 0x6f 分别是'h','e','l','l','o'对应的ASCII码。当然由于逻辑分析仪没有数据回发,所以程序中接收的数据是一直是0x00。
    one more thing:顺便看一下SCLK的周期,可以看到确实是恰好1MHz,这个和配置参数中是一样的:
    90.jpg


    如果习惯C语言的话,这种方式也挺不错的。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-18 09:47 , Processed in 0.122179 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.