c语言树莓派串口通信_树莓派与Arduino SPI通信

关联知识视频教程

使用Raspberry Pi零无线网络构建自己的GPS跟踪系统​viadean.com
3fabf29ce78cb5141d991370293b39bf.png
Raspberry Pi + Django家庭服务器​viadean.com
88ab6879c72ba781c9234c46c92e1349.png
使用Raspberry Pi和Python的轮式机器人运动控制​viadean.com
7550a016dcdfc050e6518136e3980b17.png

本教程介绍了使用SPI(串行外围设备接口总线)进行Raspberry Pi与Arduino通讯和控制的基本框架。 SPI代表了一种非常完善的芯片间通信方法,该方法在两种设备的硬件中均实现。 在这里,我们将详细探讨SPI,讨论硬件和软件注意事项,并开发一个双向通信方案的工作示例,该方案可适用于许多命令和控制应用程序。

介绍

Arduino 3.3伏

选择运行在3.3v电压下的Arduino,可以在两个设备的输入和输出引脚之间实现直接连接,而无需进行电平转换即可对齐电压并保护树莓派输入,从而简化了此项目。

Arduino通常被描述为5伏平台,但这并非完全正确。 实际上,在许多标准Arduino的核心中,ATMEGA328P-PU微控制器的额定工作电压为1.8v至5.5v。 尽管旗舰版Arduino Uno和许多其他产品都是为5v操作而设计的,但也有很多官方和非官方的3.3v Arduino供您选择,包括Fio,Pro,Pro-Mini和Lilypad。 (Pro和Pro-Mini具有3.3v和5v版本。)

开发本教程时使用的“ Arduino”是ATMEGA328P-PU,在面包板上采用准系统配置。 该设置确实是准系统。 没有电压调节器或外部时钟晶体,只有由树莓派的3.3v抽头和10K电阻将复位引脚拉高的芯片供电。 (当然,在电源轨上放置一些去耦电容器也没有什么坏处。)除了诱人的电路简单性和节俭性之外,准系统配置是连接Raspberry Pi的理想选择。 3.3v运行不仅对树莓派友好,而且使用电压调节器和晶振可以显着降低总体功耗,这对于在3.3v线路上具有50mA限制的老式树莓派尤其重要。

我通常在电池供电的小型项目中使用此准系统设置。 自己制作时,需要考虑一些在较低电压下运行328P的注意事项。 最重要的问题是需要以较低的时钟速度运行,8MHz是最快的时钟,可以在3.3v时可靠地支持该时钟。 另一个考虑因素是,必须禁用或配置328的掉电检测,以使压差小于3.3v。

Arduino官方网站上有board.txt文件:从Arduino到面包板上的微控制器,它将提供适当的设置来运行最低限度的板并加载8MHz兼容的引导程序。 如果您不熟悉启动引导程序和构建自己的主板,则本页面还将为您提供一个很好的起点,以收集必要的知识和技能。

关于树莓派环境和C ++编译器的一些注意事项

本教程是使用运行标准Raspian Linux发行版的Raspberry Pi Model B和Raspberry Pi 2开发和测试的。 这些示例应该可以在任何当前的Raspberry Pi型号上无需修改的工作。 我通过SSH从Linux PC上的终端通过SSH运行Raspi“无头”(没有监视器或键盘),因此实际上我的所有交互都在命令行中进行。 示例代码使用C ++编写,并使用GNU编译器集合(GCC)进行编译。 GCC是Raspian发行版的一部分,因此无需安装或配置即可使用。 此处的所有示例都可以使用非常简单的命令行语法进行编译:

g++ -o <target> <source>

要访问SPI外设,必须具有较高的用户权限,因此将需要使用sudo执行编译后的示例,如下所示:

sudo ./example

SPI接口

SPI是Raspberry Pi Arduino连接的几种可行选择之一。 SPI接口的一些优点是广泛采用,信号完整性,协议设计的灵活性和简单性。

SPI采用主从架构。 主设备启动并控制与从设备的所有通信。 SPI通信是同步的,这意味着两个设备之间的数据传输通过共享的时钟信号同步。 SPI通信也是全双工的,这意味着数据可以同时在两个方向上流动。

主机通过时钟线控制数据传输。 每次主机向时钟线发出脉冲时,就会有一位数据从主机发送到从机。 同时,从从机向主机推送一位数据。 实际上,出于我们此处的目的,可以将数据视为在字节级别上移动。 主机和从机各自将一个字节加载到其各自的SPI数据寄存器中,主机向时钟线脉冲八次以在每个方向上压入一个字节。 尽管可以设置各种硬件标志和可以触发的中断,但是没有SPI协议。 两个设备之间同时传输一个字节的数据是整个过程的全部。 如果需要,确认信号,错误检查,数据包定义和其他通用协议功能都可以在软件中处理。

SPI总线本身由四个物理连接组成:两条数据线,一条时钟线和从选择线。 主机必须为每个从机配备一条从机选择线,因此理论上所需的从机选择线的数量可能会增加。

Raspberry Pi和Arduino的时钟和数据线的名称和标签相同:

  • SCLK:串行时钟(主机输出)
  • MOSI:主站输出,从站输入(主站输出)
  • MISO:主机输入,从机输出(从机输出)

但是,在从站选择线上,两个平台之间的命名略有不同。 在Arduino上,该行称为“从属选择”,缩写为SS。 在Raspberry Pi上,该过程称为“片选”(缩写为CS),而CS线称为“芯片使能”线(简称为CE)。 PI实际上使两条从选择线可用,标识为CE0和CE1。

与某些串行总线方案不同,在串行总线方案中,一个设备的传输线(TX)连接到另一设备的接收线(RX),在SPI中,一个设备上的四条线直接连接到另一设备上的相应线,如下图所示。

SPI总线在ATMEGA328P-PU上的物理位置很简单,如下面的引脚图所示。 SS在物理引脚16上,MOSI在引脚17上,MISO在引脚18上,而SCLK在引脚19上。

Raspberry Pi GPIO接头的引脚排列图更加简单。 遵循下面的引脚图(与版本A,A +,B,B +和2B保持一致),MOSI是引脚19,MISO引脚21和SCLK引脚23。在本教程中,我们使用引脚24上的CS CE0。

启用树莓派SPI

在树莓派上编码SPI

Arduino上编码SPI

代码

下面列出的SPI_Hello_Raspi和SPI_Hello_Arduino程序提供了最小工作Raspberry Pi Arduino通信系统的演示。 除了对到目前为止介绍的概念进行一些调整之外,该演示对于确定您具有有效的SPI连接,以及正确的内核模块和驱动程序可用并在Pi上正常工作而言,具有非常重要的意义。

参阅

树莓派与Arduino SPI通信​viadean.com
8b08a31ec1a2362bfe707d3ba094cb04.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值