news 2026/4/23 11:12:32

Linux GPIO模拟SPI

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux GPIO模拟SPI

目录

目录

前言

软件SPI的DTS配置参考

软件SPI的内核配置参考

软件SPI的验证测试参考

总结


前言

SPI(serial peripheral interface)是一种高速的、全双工、同步的串行通信总线。

全双工体现在主从设备间通信时发送数据和接收数据是单独的数据线,能够同时接收和发送数据。

同步体现在主从设备间有时钟线,主设备提供时钟信号。

SPI可以实现采用主从方式工作,实现一对多,其中主设备通过多个CS片选引脚来控制和从设备的通信。

SPI总线在传输数据时,一般先传送高位,后传送低位;数据线为高电平表示逻辑1,低电平表示逻辑0;一个字节传送完成后,无需应答接口即可继续开始下一个字节的传送。

主设备或从设备在时钟线的上升沿或者下降沿往数据线上发送数据,在下降沿或者上升沿从数据线上读取数据。

SPI模式
SPI MODECPOL(时钟极性)CPHA(时钟相位)采样时序
mode000CLK空闲状态为低电平,数据在上升沿采样,并在下降沿移出。
mode101CLK空闲状态为低电平,数据在下降沿采样,并在上升沿移出。
mode210CLK空闲状态为高电平,数据在下降沿采样,并在上升沿移出。
mode311CLK空闲状态为高电平,数据在上升沿采样,并在下降沿移出。

在MCU或SOC硬件资源(包括总线资源和引脚资源等)受限时,如果需要使用SPI总线进行MCU或SOC和外围器件通信,在硬件SPI损坏或缺失等情况下,可以考虑使用软件模拟SPI总线,即通过普通的GPIO引脚的电平翻转和延时操作实现SPI数据的读取和写入。


软件SPI的DTS配置参考

aliases { spi1 = &spi1_gpio; }; spi1_gpio: spi1_gpio { compatible = "spi-gpio"; status = "okay"; cs-gpios = <&gpioa 0 0>; gpio-sck = <&gpioe 9 0>; gpio-mosi = <&gpiof 10 0>; gpio-miso = <&gpiod 5 0>; num-chipselects = <1>; #address-cells = <1>; #size-cells = <0>; spidev:spidev@0 { compatible = "rohm,dh2228fv"; spi-max-frequency = <100000>; reg = <0x0>; //spi-cpol; //spi-cpha; //spi-cs-high; status = "okay"; }; };

软件SPI的内核配置参考

CONFIG_SPI=y CONFIG_SPI_LOMBO=y CONFIG_SPI_GPIO=y CONFIG_SPI_SPIDEV=y(需要使用用户态SPI接口(在/dev目录下生成spidev设备)时可以打开。)

软件SPI的验证测试参考

1. 在系统内核启动和驱动加载后,查看是否存在对应的SPI设备。例如:

# find / -name "spidev1.0" /dev/spidev1.0 /sys/devices/platform/xxx.spi/spi_master/spi1/spi1.0/spidev/spidev1.0 /sys/class/spidev/spidev1.0

2. 测试发送数据。例如,查看存在对应的SPI设备后,主控的SPI接口连接从设备,将数据写入从设备的0x1A地址:

# spidev_sample -D /dev/spidev1.0 -s 100000 -a 0x1a -w "abcde" -l 5 send data: 0x61 0x62 0x63 0x64 0x65

3. 全双工数据传输测试。例如,将主控软件SPI的MOSI引脚和MISO引脚短接:

# spidev_sample -D /dev/spidev1.0 -s 100000 -w "abcde" -r -l 5 send data: 0x61 0x62 0x63 0x64 0x65 recv data: (将主控SPI的MOSI和MOSI短接之前。) 0x00 0x00 0x00 0x00 0x00 # spidev_sample -D /dev/spidev1.0 -s 100000 -w "abcde" -r -l 5 send data: 0x61 0x62 0x63 0x64 0x65 recv data: (将主控SPI的MOSI和MOSI短接之后。) 0x61 0x62 0x63 0x64 0x65

总结

基于GPIO模拟的SPI尽管其速度受到限制,但适用于对通讯速率要求较低的设备。对于需要高速通讯的场景,仍然需要依赖硬件SPI接口。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 18:02:02

为什么说程序员的核心能力不是技术更不是架构能力?

见字如面&#xff0c;我是军哥&#xff01;昨天我和一位在美国的 tiktok 工作粉丝聊了大概 1 小时&#xff0c;他是博士&#xff0c;在linedin 和亚马逊都工作过&#xff0c;是资深的算法工程师&#xff0c;我们聊了AI&#xff0c;聊了职场的核心能力&#xff0c;最终我们得出了…

作者头像 李华
网站建设 2026/4/22 16:44:33

基于大数据的hadoop和HIVE的旅游评论数据的旅游形象预测系统 爬虫可视化

文章目录项目简介系统截图大数据系统开发流程主要运用技术介绍参考文献结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;项目简介 登录模块 用户在登录页面输入正确的账号和密码后&#xff0c;系统将通过后台数据库验证用户…

作者头像 李华
网站建设 2026/4/21 15:38:35

Wan2.2-T2V-A14B在AI辅助婚礼策划中的浪漫场景预演功能

Wan2.2-T2V-A14B在AI辅助婚礼策划中的浪漫场景预演 你有没有过这样的经历&#xff1f;站在婚庆公司设计师面前&#xff0c;听着对方用“森系原木风”“巴洛克穹顶”“柔光纱幔垂坠感”这些术语滔滔不绝地描述一场婚礼&#xff0c;而你的脑海里却始终拼不出完整的画面。最后签了…

作者头像 李华
网站建设 2026/4/21 4:40:04

北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第六课 生产可能性曲线、机会成本与交易)

文章目录第六课 生产可能性曲线、机会成本、交易生产可能性曲线生产可能性曲线的概念生产可能性曲线的特征两种特殊的生产可能性曲线机会成本比较优势和绝对优势分工与交易完全分工促进双赢不完全分工同样促进双赢多人经济中的三个重要结论国际贸易中的分工与交易生活中的分工原…

作者头像 李华
网站建设 2026/4/21 22:20:02

3分钟掌握Godot解包:小白也能快速提取游戏素材的完整指南

3分钟掌握Godot解包&#xff1a;小白也能快速提取游戏素材的完整指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 想要获取Godot游戏中的精美素材却无从下手&#xff1f;godot-unpacker这款免费工…

作者头像 李华
网站建设 2026/4/23 8:17:04

Wan2.2-T2V-A14B在建筑设计可视化中的快速原型应用

Wan2.2-T2V-A14B在建筑设计可视化中的快速原型应用 你有没有经历过这样的场景&#xff1a;刚开完一场设计汇报&#xff0c;客户皱着眉头说“我还是想象不出这个空间的感觉”&#xff1f;或者团队为了比选三个立面方案&#xff0c;连续熬了三天才渲染出三段动画&#xff0c;结果…

作者头像 李华