什么情况下iic读到的芯片型号是错的

主攻ZYNQ及RTOS开发,关注Flash存储
I2C转GPIO的IO扩展芯片输出电流不足-PCF8574
板子上因为IO口不够用,采用了一个I2C转8路GPIO的芯片PCF8574(tssop20),控制Darlington管MC1413,驱动后端的7个Relay。控制逻辑简图:问题:调试中发现,前面的控制逻辑都是正确的,但是Darlington管前级的电压只有0.9V左右,这个电压明显不能使管子打开。向前怀疑PCF8574的驱动能力不足。查看datasheet,果然是标准推挽输出的上管还有个限流源,只有100uA的能力。中上部的那个p-mos只是在切换逻辑的时候才开启,用来提速rising-edge的,并不是continuous输出(怎么就有一种追求指标但对实际性能没帮助的感觉,这款片子最早是philips在97年推出的,难道有什么特别的考虑)。尝试解决1:加上拉电阻如果只是100uA的逻辑输出能力,这里就基本可以看成是open-drain输出结构了(相对Darlington管的驱动需求来说)。所以我在GPIO上加了个1K的上拉电阻,实测电压2.8V,驱动逻辑完全正常了。(可以大概计算管子需求的电流在600uA左右)但是,设计之初默认是所有relay都不开启,加上拉之后就变成了所有relay上电瞬间都是开启的,风险就来了!果然,全部上拉后,其中一个relay后面的小阻值负载电阻就过流了。故,上拉不是可靠的解决措施!尝试解决2:找驱动能力正常的IIC芯片接下来找同型号的替代芯片。TI类似“I2C IO Expander”的芯片还是很多的,比如TCA9534就是标准的推挽输出,没有任何限流,高电平驱动电流有-10mA。tssop16的兼容型号很多,却没有一个tssop20的!悲剧现在暂时的解决思路是,找找过流的relay点,然后采用一部分片子用上拉,其他有风险的全部飞线连SOIC16的TCA9538(tssop16飞线难度很大啊)!后面改用&tssop16的TCA9534、TCA9554(内部带100k上拉)。为么放过了这个100uA的限流???总结:如果是采用低电平点亮LED,或者后端驱动逻辑芯片的设计,这个片子都没什么需要特别注意的,一旦有需要高电平驱动管子之类的,最好还是换成新型号tssop16封装的,或者没冲突下外加上拉。备选型号分析:TITCA95348ch,标准推挽输出,TITCA95548ch,标准推挽输出,带弱上拉NXP、TIPCF85748ch,输出灌电流限300uAMicroChipMCP23008(MCP23S08)8ch,推挽,max 1.7mhz IICMicroChipMCP230098ch,open-drain,3.4mhzMicroChipMCP23017(MCP23S17)16ch,推挽25mA,1.7mhz,货参数比较:TCA系列MCP系列IIC-400khzaddr-cmd-data,4-registerTSSOP-16IIC-1.7mhz,SPI-10mhzaddr-cmd-data,10-registerSSOP-20尝试解决3:找mos型的芯片替代Darlington管因为mos管是电压驱动的,驱动电流需求非常小&10uA,可以用PCF8574驱动。在TI找到7ch的TPL7407L,nmos。可以完全兼容替代MC1413。项目上的问题是否可以解决了?关于手册上的COM脚推荐电压8.5V-40V之间的问题。由于项目中前端logic是3.3V的,relay的电压是5VDC。所以这个8.5V是没法满足的。手册上有一段说的很清楚,由于DRIVER这个模块是低压cmos做的,最大承压7V,所以在上面加了个LDO模块,用来把外面的Vsupply电压降到7V以内,那么可以推算出LDO有个至少1.5V的转换压降。所以才有了8.5V-min的推荐。如果Vsupply=5V,那么DRIVER的logic电压是3.5V左右,即加在栅极的电压。这个电压开启是没有问题的,只是会影响Id电流,以及Ron电阻。具体影响就是导通能力减弱了点,内阻稍大了点。估算下来,仍会优于Darlington管。但是,居然看到这句话,那么上电后,PCF8574后面的mos管会全部开启,跟措施1类似了。再次悲剧。除非前端换成纯push-pull的。At power on, all the ports are HIGH with a weak 100 uA internal pull-up to VDD。 - PCF8574TCA9554 vs. MCP23008之前一直比较纠结,400khz-IIC与10mhz-SPI,考虑到设计中的主频时钟是50mhz,400khz的串行速率是太慢了。下面根据项目情况仔细对比以下几点:1、IO口占用。iic只需要2根线就可以控制8个芯片共64个gpio,spi是4根线控制4个片子共32个gpio,如果再多带个cs共5根线控制64个gpio;---项目上需要控制38个relay2、spi的in/out分开,处理速度更快; ---项目后续可能有nand的cs/wp等控制,速度越快越好3、iic有响应机制;---暂时收到错误也不会回馈系统 一般不会有错4、23008有reset引脚,对软复位很有用; ---也可以让软件控制会初始态5、9554的tssop16和23008的QFN封装两种芯片在板子上都飞线试过相同的logic代码,iic速率330khz,都测试OK,发送指令如下:TCA9554&0x400100 由于下一步切换成output后,IO全部为高,这里先全部改为00;0x400300 地址-W,03配置寄存器设为output,因为默认是input;0x4001FF 01寄存器,所有IO输出高电平;MCP230080x420000 IODIR寄存器切换成output;0x4209FF Port寄存器全部输出高;指令格式:addr+cmd+data最终在板子上全部飞线mcp23008-soic18,跟mc1413正好pin-pin对接。后面改版决定使用mcp23008-QFN20封装的。1、封装紧凑合适;2、reset非常适用本项目;3、切换成output后默认是00;4、10个配置reg具有灵活性;另,23008指标是2.7~5.5V @400kHz, 4.5~5.5V @1.7mHz;虽然板上是3.3V供电,但还是尝试把速率提到1mhz以上。/**********************************************************************************/查询PCF8574时,无意间发现的这个牛人自制PCB板的过程,哈哈
关注微信公众号> > > 基于IIC总线控制ATMLH012芯片的读写操作.pdf基于IIC总线控制ATMLH012芯片的读写操作.pdf已有 434474个资源相关资源下载专区上传者其他资源IC设计及制造热门资源本周本月全部文档信息资源大小:1.22MB上 传 者: () 上传日期:资源类型:应用文档资源积分:1分评
论:下载次数:0参与讨论:标&&&&签:分&&&&享:文档简介基于IIC总线控制ATMLH012芯片的读写操作.pdf文档预览相关帖子大学堂最新课程请选择理由 辱骂 色情 广告提交若举报审核通过,可奖励2下载分举报人:被举报人:nkyqsl举报的资源分:1* 类型:请选择类型资源无法下载资源分类不正确资源无法使用标题与实际内容不符含有危害国家安全内容含有反动色情等内容含广告内容版权问题,侵犯个人或公司的版权其他* 详细原因:回到顶部EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱service(.cn 或通过站内短信息或QQ:联系管理员okhxyyo,我们会尽快处理。网站已改版,请使用新地址访问:
8574 用IIC芯片PFC 实现IIC扩展, 可以 8位IO口和IIC的双向转换,本程序 了用8 SCM 单片机开发 262万源代码下载-
&文件名称: 8574& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 32 KB
&&上传时间:
&&下载次数: 47
&&提 供 者:
&详细说明:用IIC芯片PFC8574实现IIC扩展,8574可以实现8位IO口和IIC的双向转换,本程序实现了用89C52模拟IIC检测4位IO口的状态并由4位IO输出检测的状态。附带Proteus仿真-Achieve IIC IIC chip PFC8574 for extension 8574 can achieve 8 IO port and two-way conversion of the IIC, the program four IO ports with 89C52 Analog IIC detects state by four IO output detection state
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&&&....\8574.DSN&&....\8574.hex&&....\8574.lnp&&....\8574.M51&&....\8574.plg&&....\8574.PWI&&....\8574.uvopt&&....\8574.uvproj&&....\main.c&&....\main.LST&&....\main.OBJ&&8574
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站262万海量源码库中尽情搜索:
&[] - It is a graphical representation of the famous quicksort . the program is in accordance to the algorithm described in Cormen.
&[] - It is a graphical representation of the Huffman algorithm . the program is in accordance to the algorithm described in Cormen.
&[] - PCF<font color=#CC的读写
&[] - c通过IIC与<font color=#CC通讯,控制1602四线方式显示,实现了单片机两IOk口控制1602显示
&[] - 串口转发IIC程序,用MEGA16实现,调试IIC接口时非常有用。我用四天的时间写了四行代码 - ma57457的专栏 - CSDN博客
我用四天的时间写了四行代码
前两周的时候我一直被一个问题所困扰,是一个关于IIC通信的问题。
我本来在进行的项目需要用到cypress的一款主控芯片。该芯片是cypress的psoc4000系列的一款芯片,这款芯片主打的功能是触摸按键,初次接触这种可编程的触摸芯片觉得挺神奇的,ide使用的是cyrepss自家的psoc4,关于这个编译环境请看我的另一篇博文。
我刚开始的时候主要写触摸芯片的代码,先把触摸按键写完,然后测试、通过;接着写接近感应,测试、通过;最后写IIC从设备通信,测试……测试…………测试,
(╯°Д°)╯︵ ┻━┻,测你大爷,通过。
写cypress的触摸芯片的时候,因为cypress提供的工具和资料挺完整的,所以一路顺风顺水的写完了,使用的是硬件IIC。这时候由于硬件组需要测试另一个项目,该项目也想用这个芯片,让我提供一份测试代码,我直接把代码对应的引脚修改了一下,然后按照该项目的通信协议,兼容了主控芯片的代码。然后直接提交。然后,我接着摆弄我自己的项目去了,然后,噩梦开始了。
我说说硬件组的测试项目的硬件环境,这个项目使用的芯片也是cypress的一款芯片,具体型号我就不说了,这和本文的关系不大,这颗作为IIC主设备的芯片使用软件延时的方式模拟的IIC通信,原先使用的触摸芯片是GreenChip的一款不可编程的触摸芯片,这次希望测试使用cypress的可编程的触摸芯片,然后我完全按照GreenChip芯片的datasheet去写我的cypress的IIC的地址定义,目的是不想改主设备芯片的代码。
照这个思路,我将cypress的代码写完了,并且自己测试完了一边cypress的功能,我的测试环境我要解释一下,我的测试工具使用的是cypress的IDE提供的一个小工具作为IIC主设备,利用仿真器接usb作为IIC发送端直接接cypress触摸芯片,然后在上位机那直接发送IIC读取命令,读取cypress触摸芯片里面的IIC的地址,IIC的地址里面的内容会根据我的手指对按键传感器的触发修改为不同的&#20540;,我自己测试的时候是通过的,然后就直接交付给硬件组。
当硬件组拿回去烧录完成后,测试按键触发状态的时候,(-?-;)额,没有反应,没有反应…………
好吧,然后测试样品被返回给我,然后将事情进行了全世界通报,公司内部邮件抄送双方领导,我得陪着笑,小心翼翼的接过这个锅,背着,然后继续码代码。
一开始的debug的思路是怀疑cypress的代码有问题,于是各种查找,各种修改,标准IIC尝试了一下,cypress的自己的EZIIC也尝试了一下,怎么改都不行,用cypress 的自己的工具调试怎么调怎么好,反正我发什么,它就回相应的数据,一点问题都没有,一换到项目的主控芯片就是不行,用逻辑分析仪抓取的波形怎么都不对,就是偶尔正常,偶尔不正常,不正常波形的比例接近百分之三十,这是完全不能接受的,就是说五个iic读取信号里面有至少有2个不能用,这完全过不了主设备芯片的消抖算法,要完成一个按键出发起码需要5个按键按下,这就能解释为什么,当换了cypress 的芯片之后,按键完全没有反应。因为IIC通信异常啊。
直到这个时候,我依旧没有怀疑IIC主设备的代码,虽然它是使用的软件模拟的IIC,主要是因为这个主控芯片在使用GreenChip的时候没有出现问题,跑得好好的,而且IIC总线上还挂接了一个RTC时钟,一个EEPROM芯片,一共三个从设备,为啥人家都没问题,就我的触摸IC有问题?( ▼-▼ )?
这个困扰了两天,周三开始debug,周四抓了一天波形,周五白天又各种修改代码,领导的领导还陪着我调试了一个晚上,依旧找不到问题的原因,然后开始了怀疑主控芯片的程序有问题,并尝试性的改了一点,问题依旧复现。
周六加班接着debug,一个早上,我都在和主控芯片的程序纠缠,网上各种找资料,有个尴尬的事情我要吐槽一下,公司不允许上外网,我是用的手机流量上的外网,各种找资料,然后各种找不到,在嵌入式这一行里面有个现象,真正有实力的大神,一般不会主动写博客,都是我这种菜鸟才有种闲心,所以,我啥资料也没有找到。反倒是IIC的协议翻来覆去看了又看,( ▼-▼ )就两根线,我还能看出花来啊。
下午,我痛腚思痛,照着IIC协议改写主控芯片的模拟IIC程序,从起始信号,到结束信号,我一点一点的改,改一点,我调试一遍,用逻辑分析仪抓一遍波形,不对,接着改……
改到发送信号的时候,我发现,主设备发送完数据之后没有释放总线,咦?咦?会是它的锅吗?然后我将总线释放,NO
然后接着抓头发,摔鼠标,咦,好像主设备代码没有检测从设备应答,是它的锅不?然后我加了一段检测从设备应答的代码……( o? ω o? )y
然后,天空放晴了,连泡了一天的菊花变得甘甜了。因为主设备没有去检测从设备的应答,直接发送一个伪应答检测成功信号,自己把通信时序打乱了(这个技术要点可以看我的上一篇博文,有介绍),而从设备实际上没有响应,主设备自认为从设备已经响应了,然后马上发送下一个数据,导致通信波形都不对了,然后导致了IIC通信异常。
原GreenChip 的芯片没有问题,因为GreenChip的响应时间能满足这个需求,在主设备发送完一个数据之后,大约经过40us马上发送一个应答接收成功的信号,GreenChip能响应得过来,不代表cypress触摸芯片能响应过来,后面我用逻辑分析仪测试的响应时间时间长的有100us,这就是我四天里面的痛苦的根源。
我贴一段伪代码:
i&#43;&#43;;
while(1 == SDA && i&0xffff)//超时检测1ms
这次之后,能写硬件IIC就不要写软件IIC。
我的热门文章
即使是一小步也想与你分享3.SPI的功能及特点;SPI的设计完全符合SPI的协议,能够实现完善的;1.SPI从机,全双工通信;2.中断机制,SLEEP唤醒功能;3.10M的通信速率;4.异常通信情况的诊断;SPI用到两组寄存器,其中ISCON和IIC共用;⑴ISCONC0h;Defaultvalue:4;之前已经介绍过了此寄存器的低三位,高5位用于SP;SPIEN:SPI总使能位;
3. SPI的功能及特点
SPI的设计完全符合SPI的协议,能够实现完善的全双工通信,标准的4线端口。功能及特点如下:
1. SPI从机,全双工通信
2. 中断机制,SLEEP唤醒功能
3. 10M的通信速率
4. 异常通信情况的诊断
SPI用到两组寄存器,其中ISCON和IIC共用,另外一个是SPI专用的SPIBUF。
Default value:40H
之前已经介绍过了此寄存器的低三位,高5位用于SPI,其中Bit6保留未用(读取值为1),实际用于SPI的只有4位。
SPIEN:SPI总使能位。只有SPIEN=1的时候,SPI电路才会工作。此位可读可写。
SWCOL:SPI写冲突标志位,功能类似于IICSTAT的WCOL标志位。它用来标志在条件不满足的情况下写SPIBUF的操作。SPI电路不管主机是读或者写操作,在每8个时钟过后,SPI都会接收到一个数据,即使在单纯的发送情况下,接收到的数据可能是无效的,但是从机依然需要读取这个无效的数据,用于清零SBF标志位。如果用户想单纯的发送数据,而不读取SPIBUF的话,则会造成写冲突。也就是SPIBUF是满的情况下,试图写数据到SPIBUF中去,这会导致SWCOL置位,即发生了写冲突,需要软件清零。
SROV:接收溢出标志位。此位的功能和IIC的RECOV功能基本一样,表示在SPIBUF满的情况下,又接收到新的数据,这会导致接收溢出。导致接收溢出的原因可能是软件处理速度比较慢,MCU还没有读取SPIBUF,又接收到了新的数据;还有一种情况就是软件出错,MCU没有读取SPIBUF的指令也会导致此问题。SPI也分为接收和发送数据,或者说是全双工,同时发送接收。不论和种情况,只要产生中断信号,则表示SPIBUF把数据发送出去,同时也会接收到一个数据,即使在单纯的发送情况下,SPI也会接收到一个数据(此数据可能是无用的),这就要求用户在中断程序中要读取SPIBUF。这点是要特别注意的地方。
SBF:SPIBUF满标志位。此位的功能和IIC的BF功能相似,表示SPIBUF当前是满或者空。SBF=1,表示SPI接收到一个数据,SPIBUF满;SBF=0表示SPIBUF没有接收到数据,或者接收到的数据已经被读取。
SPIBUF如果本来是空的,在接收到一个数据之后,SBF就会置位,表示SPIBUF满,这时用户需要读取SPIBUF。用户软件读取SPIBUF的操作会间接清零SBF。正如前面介绍,在SBF=1的情况下,如果SPIBUF又接收到新的数据,则会发生接收溢出,也就是主机发送的数据,从机没有接收到,但是这种情况的发生,主机也不知道,这就导致了通信的失败,所以SBF要及时清零。
4. SPI的应用
SPI即串行通信端口,实现数据的交换。能够实现单工和全双工的通信方式。对于从机来说,既可以接收数据也可以发送数据。SPI典型的四线窜口,有一根片选信号,这就免去了软件寻址的麻烦,但是占用了一个I/O端口。在I/O紧张的情况下,这是一个弊端。
软件应用也很简单,首先设置好端口方向寄存器,打开中断使能,然后使能SPIEN。如果出现SPI中断,则表示SPI接收到一个数据,在用户中断服务子程序里就可以读取数据,进行相应的处理了。SPI也是基于中断实现通信功能的。
SPI 通信示意图
SPI通信示意图
如途中所示位SPI的通信示意图。上面4根信号线是SPI的端口,下面SBF和INT_SPI是内部信号。
由图可知:SPI的空闲时钟停留在高电平,上升沿采样输入,下降沿输出。 SS片选信号,低电平表示选中,在每8个时钟过后,SPI就会接收一个数据,同时也会发送出去一个数据,第8个时钟的下降沿之后SBF就会置位,同时也会产生一个中断信号。至于要发送多个字节的情况,信号变化相同。在整个通信过程中SS都要保持低电平。
如果说用户希望SPI只工作于接收模式,而不发送数据,则可以通过把SDO的方向寄存器设置为输入即可。
当IIC总线上挂接多个从机的情况下,主机对本系列芯片以外的IIC器件读取数据的时序要求:
1、设置主机DAV信号端口为输出,并输出高电平
2、主机对BF6921a芯片的0x0a寄存器写入写入0
3、主机读取其他IIC器件的IIC数据
4、主机DAV信号输出低电平
5、延时100us
6、主机DAV信号输出高电平
7、主机DAV端口设置为输入(中断检测端口)
8、延时200us
当IIC总线上挂接多个BF6921A芯片时需要对每一个芯片进行相同的操作(即在每次读取IIC数据时把BF6921A芯片的iic使能关闭,通过以上操作实现)
例如:IIC总线上接入BF6921A芯片chipA、chipB,其他IIC设备chip1、chip2,当
读chip1或chip2数据时,需要对chipA和chipB分别执行以上的步骤1~2,接着读
取数据,随后对chipA和chipB分别执行步骤4~8,而当读取chipA数据时,也需要对chipB执行关闭操作
IIC休眠唤醒功能延时要求:
如果通过IIC使器件进入休眠状态后,需要再通过IIC唤醒器件,请确保器件在休眠之前IIC的中断使能且IIC使能,器件在第一个ACK时被唤醒,在唤醒后,器件需要经过2ms左右的时间才能正常工作。
三亿文库包含各类专业文献、文学作品欣赏、幼儿教育、小学教育、行业资料、中学教育、IIC应用61等内容。 
 在 80C51 单片机应用系统的串行总线扩展中,我们经常遇到的是以 80C51 单片机为...2)IIC 总线的信号类型 IIC 总线在传送数据过程中共有 3 种类型信号:开始信号...  百度文库 专业资料 IT/计算机 计算机软件及应用专题推荐 北师大二附理科学霸高中....IIC_SDA=P2^6; sbit IIC_SCL=P2^5; //声明 IIC 总线的数据线接在单片机...  IIC EEPROM程序详细解释_计算机软件及应用_IT/计算机_专业资料。IIC的程序,EEPROM的存储器使用,可模块化使用#include &intrins.h&//头文件 #include &AT89X52.h...  IIC总线协议_计算机软件及应用_IT/计算机_专业资料。通信协议:所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送 速度、传送步骤、检纠错方式...  IIC协议使用_金融/投资_经管营销_专业资料。IIC 协议使用 I2C 总线串行接口应用设计 I2C 是一种较为常用的串行接口标准,具有协议完善、支持芯片较多和占用 I/O ...  软件模拟IIC_信息与通信_工程科技_专业资料。软件模拟IICCC 源程序 ...IIC总线应用实例仿真+源... 24页 免费 51单片机的模拟IIC总线程... 8页 免费...  stm32 之 IIC应用_信息与通信_工程科技_专业资料。stm32 之 IIC 应用 iic 协议是比较简单的双线协议,时钟线 CLK 和数据线 SDA。 一般我们常见的还有 spi 总线...  iic总线学习心得_专业资料。IIC和SPI 主控端 - 为启动数据传送 (START 指令)...公司为现代汽车应用领先推出的 一种多主机局部网,由于其卓越性能现已广泛应用于...  基于S3C2440的IIC程序_计算机软件及应用_IT/计算机_专业资料。这是基于//=== // File Name : IIC.c // Function : S3C2440 IIC-bus Master Tx/Rx mode ...

我要回帖

更多关于 iic芯片 的文章

 

随机推荐