开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享 |
您所在的位置:网站首页 › 输出线是什么 › 开漏输出(open drain)与推挽输出(push pull)学习详解及某个踩到的坑分享 |
推挽输出和开漏输出是单片机的两种基本状态,实际的性质有所区别,下面是个人的分析,若有不对之处敬请指正。 (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的官方解释还是很有意义的。 当连接多个从设备时,为了避免多根线与的MISO争用总线,通常需要对每个MISO的信号进行单独的开关控制,在这里,在隔离方案中,这里变成了带使能端的数据隔离器ADum1401,因此可以在改变CS信号时就同步变更活跃的MISO信号源,使得不至于争用总线;而我们实际用的比较多的TI的ISO7762系列,是不带使能功能的普通高速数据隔离器。 器件上的坑还是很多,现在回头看,通过测量仪器确定了问题的原因,也采用软件/硬件的方式临时性解决了这个问题,但始终没能为其给出特别让人信服的解释(或者说,不敢认为SPI挂接多个从设备的方式是对的),实际上真正有ADI/TI早就在器件外围上给出了对应的提醒。 解决方案:要么就用带使能端的数据隔离器,如果不用数据隔离器,那么就加一个CS控制的三态门在MISO信号上,这倒是比较节省成本。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |