开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享

您所在的位置:网站首页 输出线是什么 开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享

开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享

2024-07-12 13:46| 来源: 网络整理| 查看: 265

推挽输出和开漏输出是单片机的两种基本状态,实际的性质有所区别,下面是个人的分析,若有不对之处敬请指正。

(1)推挽输出:有确定的输出状态(非0即1) 推挽输出 (2)开漏输出(OD):不附加上拉电阻时没有高电平输出能力,线与逻辑实现方案 开漏输出 当多个OD共享一个上拉电阻Rp时,只要有任意一个输出为0,其他所有的输出也都会被拉到地,因此假定逻辑输入为A、B,一般为了控制逻辑和实际输出的电平逻辑一致,会在控制端附加反相器,因此会出现图片里逻辑功能函数L = ~B · ~A的情况。

(3)踩到的坑 算是SPI的不规范用法吧,F4一个SPI上挂了4个F103,通过片选对4个103的数据进行周期查询。 只开启一路103的SPI时,没问题,但是多路103的SPI开启后,啥数据都读不到了。

最后考虑可能是103的MISO每次被读取结束后,输出状态依然保持,导致把其他正常通信的SPI输出给干扰了。

最后不得以,通过片选信号外部中断输入来周期性关掉未被使用的103的SPI,这才正常通信。 一般SPI要带多个从机需要用菊花链,但是菊花链多个从机之间,MOSI串联会存在一个周期的延迟,在一主多从高速通信时会存在指令延迟丢包。

目前的解决方案是牺牲性能为代价的,目前还没有想到更好的办法,也欢迎各位给出意见。

/2021.07.20更新/ 踩到的这个坑得到了解释,虽然来得比较晚,但是能有ADI的官方解释还是很有意义的。 ADI带使能的数据隔离器 多SPI从机示例 当连接多个从设备时,为了避免多根线与的MISO争用总线,通常需要对每个MISO的信号进行单独的开关控制,在这里,在隔离方案中,这里变成了带使能端的数据隔离器ADum1401,因此可以在改变CS信号时就同步变更活跃的MISO信号源,使得不至于争用总线;而我们实际用的比较多的TI的ISO7762系列,是不带使能功能的普通高速数据隔离器。

器件上的坑还是很多,现在回头看,通过测量仪器确定了问题的原因,也采用软件/硬件的方式临时性解决了这个问题,但始终没能为其给出特别让人信服的解释(或者说,不敢认为SPI挂接多个从设备的方式是对的),实际上真正有ADI/TI早就在器件外围上给出了对应的提醒。

解决方案:要么就用带使能端的数据隔离器,如果不用数据隔离器,那么就加一个CS控制的三态门在MISO信号上,这倒是比较节省成本。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3