资料介绍
描述
微控制器限制
几年来我一直在构建“连接传感器”,但最初专注于“传感器”部分,直到最近才转向“连接”。每次我探索一种新的连接技术——WiFi、蜂窝、蓝牙、LoRa 等——我都会遇到 Arduino 的一些限制,尤其是其有限的工作内存。当我开始连接传感器时,这些问题源于两个来源:1) 使用长变量或键;2) 字符串操作,例如解析 64 位 GSMloc 字符串以从附近的手机信号塔中提取时间或位置。
在找到这个多主解决方案之前,我已经尝试了所有常见的疑点:使用非 Atmel 变体(例如Teensy )、将静态变量移动到程序内存中以及在打印语句中使用 F( ) 参数。我也开始将 TI 的 FRAM 芯片放在我的板上,因为我不喜欢 Arduino EEPROM 的有限寿命(100,000 次写入)。
本文介绍了另一种方法,使用多个微控制器来管理我的电路板的功能。这些微控制器将共享对公共 I2C 总线的访问和通信。我想使用标准的Arduino Wire Library ,我很高兴看到这个库声称支持多主机。然而,正如wayneft 在 Arduino.cc 上的这个线程中所描述的那样,有一个很大的问题:Arduino 的多主控支持可以在争夺初始控制权的主控或总线之间进行仲裁,但它可能会在主控完成之前错误地释放总线它。这可能导致总线和您的程序锁定。
避免碰撞和比赛条件
我为这个问题开发了一个简单的解决方案,再加上 Wire 确实提供的多主机支持,可以对 I2C 总线进行稳健的共享控制。我添加了线来连接微控制器上的两组 I/O 引脚:忙碌和时钟。时钟线是我的实时时钟输出的 32kbs 方波。Busy 和 Clock 线都使用 4.7k ohm 上拉电阻拉高。这允许我们对总线的控制进行仲裁,因为每个微控制器都需要使用 Busy 线“声明”总线,而 Clock 线确保它们不会同时声明总线。
以下是它如何与下面提供的示例代码片段一起使用:
- 如果 Arduino 想要读取或写入 I2C 总线,它首先需要检查 Busy 线是否为高电平(这表示总线当前空闲)。然后,它需要检查时钟线,只有在时钟线为低时才能将 Busy 线拉低。
- 如果 Simblee 想要读取或写入 I2C 总线,它首先需要检查 Busy 线是否为高电平(这表示总线当前空闲)。然后,它需要检查时钟线,只有在时钟线为高时才能将 Busy 线拉低。
- 如果 Simblee 或 Arduino 想要访问总线并发现它Low ,他们需要等待。
-
我通过创建两个函数在代码中实现了这一点:
TakeTheBus();
和GiveUpTheBus();
. 每个都返回一个布尔值,因此您可以编写代码以等待成功尝试,然后再继续。
这种类型的通信,其中一个上拉电阻器将线路保持为高电平,并且微控制器“写入”总线的唯一时间是将其拉低,应该防止可能损坏任何一个处理器的情况。
与 SPI 相比
您可能会说——“I2C 也被称为两线接口。这种方法使用了四个,这并不比 SPI 好!”。没错,但请考虑以下几点:
- I2C 传感器通常更常见且更便宜
- 四线要求仅在两个主控之间
- I2C 传感器可以在距离您的电路板更远的地方进行通信
使用这种方法,您可以有效地在两个微控制器之间分配工作。我让 Arduino 专注于服务来自传感器的中断并将数据记录到 FRAM。Simblee 能够从该 FRAM 读取数据并使用蓝牙 LE 将其提供给手机上的应用程序。每个草图都变得更短更容易调试,并且减少了 Arduino 内存的压力。我计划在后续文章中记录电路板设计。
我希望你觉得这篇文章有帮助。
- 使用Arduino的LCD I2C闪烁文本
- I2C扫描仪之如何在Arduino上查找I2C地址
- Arduino与树莓派之间的I2C通信
- 如何在arduino中使用I2c LCD模块
- MM32F013x——I2C从机多地址应用
- MM32F013x —— I2C从机多地址应用
- ESP32 之 ESP-IDF 教学(六)——I2C数据总线(I²C)
- 硬件I2C与模拟I2C
- AT24C02驱动程序I2C串行总线的组成及工作原理
- I2C串行总线的组成及工作原理的详细资料说明
- Arduino教程之I2C模块使用教程资料免费下载 9次下载
- 基于I2C总线的单主多从通信 13次下载
- I2C Guid I2C指南
- 用嵌入式系统的SPI模块实现I2C总线通信
- 模拟I2C总线多主通信的通用软件包
- 雅特力AT32F423 I2C使用指南 425次阅读
- 上拉电阻在I2C电路中的作用 I2C上拉电阻的计算方法 2126次阅读
- I2C通信协议及其工作原理 4481次阅读
- 什么是I2C协议? 2122次阅读
- AT32F435/437 I2C使用指南 1415次阅读
- Linux I2C驱动入门知识科普 1516次阅读
- MM32F0140 MCU关于I2C的介绍、配置及实验 3693次阅读
- 什么是I2C通信协议? 7572次阅读
- i2c总线用来做什么_i2c总线数据传输过程 7086次阅读
- Core I2C的原理及采用FPGA技术实现I2C IP核的设计 2654次阅读
- I2C总线的工作原理以及优缺点解析 1.4w次阅读
- LPC2124开发板I2C总线接口的应用 1875次阅读
- 80C51单片机模拟I2C总线的主机程序分享 3232次阅读
- I2C总线的特点、控制技术与传输分析 9911次阅读
- spi与i2c总线有什么区别 4w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多