嵌入式开发板硬件 *** 作入门学习5——使用一线传输双向数据

嵌入式开发板硬件 *** 作入门学习5——使用一线传输双向数据,第1张

使用一线传输双向数据 1. 面临的问题


两个设备之间,只使用一条数据线,能否传输双向的数据?

  • A发出高电平,B发出低电平
    • 电路可能被损坏
    • 电路上到底是高电平还是低电平?不能确定
  • 问题在于:有两个设备试图同时驱动电路
2. 解决方法

不让双方同时驱动电路,或者即使同时驱动也没关系:

  • 不让双方同时驱动电路:双方无法约定时间,此方法不可行
  • 即使同时驱动也没关系:可行,电路如下:

真值表如下:(下表中A、B的0和1值代表是否驱动三极管,0表示不驱动,1表示驱动。)

ABDATA
001(由上拉电阻决定)
010
100
110

从真值表和电路图我们可以知道:

  • 当某一个芯片不想影响SDA线时,那就不驱动这个三极管
  • 想让DATA输出高电平,双方都不驱动三极管(SDA通过上拉电阻变为高电平)
  • 想让DATA输出低电平,就驱动三极管

芯片内部的三极管,被称为open collector,开集,也就是在芯片内部三极管的集电极是开放的。
芯片内部不驱动三极管是,集电极的电平由外面的上拉电阻决定。

这种电路实现了:

  • 双方设备即使同时想输出不同的电平:
    • 电路也不会被损坏
    • 电平也是确定的
3. 双向传输示例
  • 初始状态:一开始,双方都不驱动三极管,DATA为高

  • 起始信号和回应:A想传输数据给B,发出开始信号、得到回应信号

    • A检测DATA线,高表示对方没有占用数据线
    • A驱动三极管,使得DATA为低,用来通知B:我就要传输数据了
    • A释放三极管,DATA变为高
    • B驱动三极管,使得DATA为低,用来通知A:好的,我准备好了(这是一个回应信号)
    • B释放三极管,DATA变为高
  • 传输:A发送数据给B,比如传输2位数据0、1

    • 双方都使用同一套数据表示方法,比如使用60US来传输一位数据,数值由DATA电平决定
    • 在第1个60us,A设置DATA为低;在同一时间,B读取DATA电平得到数据0
    • 在第2个60us,A设置DATA为高;在同一时间,B读取DATA电平得到数据1
  • 结束:A释放三极管,DATA变为高电平

  • 这时候,B也可以使用一样的方法给A传输数据

配套视频网站:
B站:https://www.bilibili.com/video/BV17g411F7oR?p=9
嵌入式开发板硬件 *** 作入门—韦东山

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/743453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-29
下一篇 2022-04-29

发表评论

登录后才能评论

评论列表(0条)

保存