一种I<sup>2</sup>C总线通信死锁解决方法

文档序号:6439581阅读:265来源:国知局
专利名称:一种I<sup>2</sup>C总线通信死锁解决方法
一种11总线通信死锁解决方法技术领域
本发明属于系统总线通信技术领域,具体涉及一种1 总线通信死锁解决方法。
技术背景
I2C (Inter 一 Integrated Circuit)总线是同步通信的一种,用于连接微控制器及其外围设备。1 总线有两根信号线,一根SCL时钟线和一根双向SDA数据线。1 总线具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在正常情况下,1 总线协议能够保证总线正常的读写操作,但是当1 主机复位(系统软复位,看门狗动作,板上电源异常导致复位芯片动作,手动按钮复位等等)等异常情况有可能导致1 总线死锁产生,表现为SCL时钟线为高,SDA数据线一直为低。目前业内一般有以下几种方法来解决I2C 总线产生的死锁问题1、将所有1 从机的电源连接在一起,通过MOS(Metal-Oxid-Semiconductor)管连接到主电源,而MOS管的导通关断由1 主机来实现。此法需要增加额外的附加电路,并且此法采用对1 从机断电的方法会对从机的正常使用带来不利影响;2、在1 总线上串入一个具有死锁恢复的1 缓冲器,如Linear公司的LTC4307等。 此法也需要增加额外的附加电路,并且会增加附加成本;3、在1 总线上增加一个额外的总线恢复设备,这个设备专门用于监视和恢复1 总线状态。此法同样有着需要增加额外附加电路和增加成本的缺点。
公告号为CN 100426274C的发明专利公开了一种避免I2C总线锁定的方法与装置;上述发明专利针对的是主设备复位时,由于SDA数据线输出低电平所造成主设备无法产生起始、停止信号的问题提出的。1 总线上连接有控制设备,该控制设备对CPU及其外围设备间的1 总线进行实施监控,若监控设备检测到CPU复位,判断1 总线是否存在锁定的可能,若有可能被锁定,则由该监控设备相1 总线提供至少一次读操作所需的时钟信号数,保证完成一次完整的读操作,以避免1 总线锁定。上述发明专利,若1 总线上连接有多个主设备和多个从设备时需要增加多根用以检测复位信号的复位线,不仅增加了系统的成本,而且增加了整个装置信号的复杂性。申请号为201010606296. 3的发明专利申请文件公开了一种消除1 总线死锁的装置及方法,该消除1 总线死锁的装置包括检测单元、 时钟单元、N个可控开关;检测单元还包括第一检测单元和第二检测单元;通过检测单元检测到SCL处于高电平,SDA处于低电平的时长超过第一阈值,则输出触发控制信号至时钟单元;时钟单元根据检测单元输出的信号产生时钟信号,并输出时钟信号至1 总线中的时钟线SCL ;检测单元在检测到SCL处于低电平的时长超过第二阈值,通过断开设备与1 总线的连接来查找出现故障的设备,将出现故障的设备隔离出1 总线;上述发明专利申请文件仍需附加多个外围设备,需通过外加设备接触死锁,不仅使得信号处理复杂化,也增加了成本。发明内容
本发明的目的是针对上述现有技术的问题和不足,提供一种I2C总线通信死锁解决方法,不增加任何额外电路,不增加任何附加成本,并且快速、准确的解决1 总线通信过程带来的死锁问题。
为达到上述目的,本发明采取的技术方案是一种I2C总线通信死锁解决方法;所述I2C总线包括一条串行SDA数据线和一条串行 SCL时钟线;所述1 总线设置有一个主机和至少一个从机;其特征在于1 总线通信死锁解决方法包括基于主机的执行方法,所述基于主机的执行方法包括以下步骤A、监测1 总线的工作状态;若主机不能向1 总线从机发送探测信息,则1 总线处于死锁状态;B、当1 总线处于死锁状态,主机模块复位,控制SCL时钟线产生时钟脉冲信号,使处于死锁状态的1 从机解锁;C、从机解锁后,主机模块重新初始化,使1 总线通信重新正常工作。
所述步骤A包括以下分步骤AUI2C总线系统正常运行后首先进入一个系统延时期后进入步骤A2,同时对主机计数器清零;所述1 总线系统延时期默认为0. 5s ;A2、采用主机写的方式开始向1 总线从机η发送探测信息,进入步骤A3 ; A3、若此时1 总线运行正常,步骤A2正确完成,主机收到从机的应答位,I2C总线系统返回步骤Al,继续监测1 总线的状态;若1 总线处于死锁状态,步骤A2将不能正确完成, 主机收不到从机的应答位,进入步骤B。
所述步骤B包括以下分步骤Bi、判断本次监测中主机是否向所有从机发送完探测信息,若没有发送完则返回步骤 Al中,继续本次的监测;若发送完进入步骤B2 ;B2、判断连续监测次数是否大于监测门限次数3,若连续监测次数不大于3,返回步骤 Al,继续另一轮的监测;连续监测次数大于3则进入步骤B3 ;B3、主机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通10( Input/Output) 口,进入步骤B4 ;B4、将SDA数据线所在IO 口线设置为高电平状态,控制SCL时钟线连续产生9个时钟脉冲信号,此步骤功能可以使处于死锁状态的从机解锁,进入步骤C。
所述步骤A2中η为1 Ν,Ν为I2C总线系统中的从机总数;所述探测信息包括起始位、从机地址字节、若干探测数据字节和停止位;所述步骤Β2中连续监测次数为主机计数器计数次数,每完成一次监测,主机计数器变累加一次。
所述从机为具有可编程功能的模块或者单纯1 功能接口器件。
所述1 总线通信死锁解决方法,其特征在于还包括基于具有可编程功能的从机的执行方法,所述基于具有可编程功能的从机的执行方法包括以下步骤D、监测从机工作状态及从机错误计数器,当错误计数器技术次数超过监测错误门限次数时,表明1 总线处于死锁状态;监测错误门限次数默认为3次;E、当1 总线处于死锁状态,从机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,再重新初始化从机模块,使I2C总线通信重新正常工作。
所述步骤D包括DU 1 计时器清零,1 计时器用于监测在设定时间内从机是否收到来自主机的探测信息,进入步骤D2 ;无设定时间时,默认时间为Is ;D2、判断是否收到来自主机发送的探测信息,若收到进入步骤D3 ;若没有收到进入步骤D5 ;D3、从机错误计数器清零,错误计数器用于记录从机连续未收到主机探测信息的次数, 进入步骤D4 ;D4、lt总线系统延时一段时间后进入下一轮的监测,进入步骤Dl ;1 总线系统延时时间默认为Is ;D5、fC计时器启动开始计时,进入步骤D6 ;D6、判断1 计时器是否溢出,若没有溢出返回步骤D2继续监测从机是否收到主机的探测信息;若1 计时器溢出则表示本次监测结束且没有监测到从机接收到主机的探测信息,进入步骤D7 ;D7、错误计数器加1之后进入步骤D8 ;D8、判断错误计数器计数次数是否大于监测错误门限次数3次,若没有则进入步骤Dl 重新开始下一轮的监测;若错误计数器计数次数大于监测错误门限次数3次则表明监测到一次1 通讯错误,即表明此时1 总线是处于死锁状态,进入步骤E。
所述从机为单片机或者FPGA (Field-Programmable Gate Array)。
所述从机为温度传感器。
本发明提供的1 总线通信死锁解决方法具有以下有益效果1、不增加任何额外电路;2、不增加任何附加成本;3、I2C总线通信死锁解决方法基于主机的执行方法适合于任何从机,对从机是否可以编程没有要求;4、I2C总线通信死锁解决方法还包括基于具有可编程功能的从机的执行方法,与基于主机的执行方法一起更好地解决1 总线死锁问题,起到双重保险的作用;5、能够快速准确的解决1 总线通信死锁问题;6、不会对设备的正常运行过程带来任何不利影响。


图1为I2C总线通信死锁解决方法基于主机的执行方法的流程图。
图2为1 总线通信死锁解决方法基于具有可编程功能从机的执行方法的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式
做详细的说明,但它们不是对本发明的进一步限制。
I2C总线包括一条串行SDA数据线和一条串行SCL时钟线;1 总线设置有一个主机和至少一个从机。从机为具有可编程功能的模块,如单片机或者FPGA ;从机也可以是单纯1 功能接口器件,如温度传感器。
1 总线通信死锁解决方法包括基于主机的执行方法和基于具有可编程功能的从机的执行方法。
基于主机的执行方法包括以下步骤A、监测1 总线的工作状态;若主机不能向1 总线从机发送探测信息,则1 总线处于死锁状态;B、当1 总线处于死锁状态,主机模块复位,控制SCL时钟线产生时钟脉冲信号,使处于死锁状态的1 从机解锁;C、从机解锁后,主机模块重新初始化,使1 总线通信重新正常工作。
基于具有可编程功能的从机的执行方法包括以下步骤D、监测从机工作状态及从机错误计数器,当错误计数器技术次数超过监测错误门限次数时,表明1 总线处于死锁状态;监测错误门限次数默认为3次;E、当1 总线处于死锁状态,从机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,再重新初始化从机模块,使I2C总线通信重新正常工作。
具体地说,如图1所示,基于主机的执行方法包括以下步骤AUI2C总线系统正常运行后首先进入一个系统延时期后进入步骤A2,同时对主机计数器清零;所述1 总线系统延时期默认为0. 5s ;A2、采用主机写的方式开始向1 总线从机η发送探测信息,进入步骤A3 ; A3、若此时1 总线运行正常,步骤A2正确完成,主机收到从机的应答位,I2C总线系统返回步骤Al,继续监测1 总线的状态;若1 总线处于死锁状态,步骤A2将不能正确完成, 主机收不到从机的应答位,进入步骤B ;Bi、判断本次监测中主机是否向所有从机发送完探测信息,若没有发送完则返回步骤 Al中,继续本次的监测;若发送完进入步骤B2 ;B2、判断连续监测次数是否大于监测门限次数3,若连续监测次数不大于3,返回步骤 Al,继续另一轮的监测;连续监测次数大于3则进入步骤B3 ;B3、主机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,进入步骤B4 ;B4、将SDA数据线所在IO 口线设置为高电平状态,控制SCL时钟线连续产生9个时钟脉冲信号,此步骤功能可以使处于死锁状态的从机解锁,进入步骤C ; C、从机解锁后,主机模块重新初始化,使1 总线通信重新正常工作。
具体地说,如图2所示,基于具有可编程功能的从机的执行方法包括以下步骤 DU 1 计时器清零,1 计时器用于监测在设定时间内从机是否收到来自主机的探测信息,进入步骤D2 ;无设定时间时,默认时间为Is ;D2、判断是否收到来自主机发送的探测信息,若收到进入步骤D3 ;若没有收到进入步骤D5 ;D3、从机错误计数器清零,错误计数器用于记录从机连续未收到主机探测信息的次数, 进入步骤D4 ;D4、lt总线系统延时一段时间后进入下一轮的监测,进入步骤Dl ;1 总线系统延时时间默认为Is ;D5、fC计时器启动开始计时,进入步骤D6 ;D6、判断1 计时器是否溢出,若没有溢出返回步骤D2继续监测从机是否收到主机的探测信息;若1 计时器溢出则表示本次监测结束且没有监测到从机接收到主机的探测信息,进入步骤D7 ;D7、错误计数器加1之后进入步骤D8 ;D8、判断错误计数器计数次数是否大于监测错误门限次数3次,若没有则进入步骤Dl 重新开始下一轮的监测;若错误计数器计数次数大于监测错误门限次数3次则表明监测到一次1 通讯错误,即表明此时1 总线是处于死锁状态,进入步骤E ;E、当1 总线处于死锁状态,从机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,再重新初始化从机模块,使I2C总线通信重新正常工作。
需要说明的是步骤A2中η为1、N为I2C总线系统中的从机总数;探测信息包括起始位、从机地址字节、若干探测数据字节和停止位;步骤Β2中连续监测次数为主机计数器计数次数,每完成一次监测,主机计数器变累加一次。主机根据探测信息中的从机地址字节判断是否向所有从机发送完探测信息。
从机为具有可编程功能的模块或者单纯1 功能接口器件。具体地说,具有可编程功能的模块可以为单片机或者FPGA (Field-Programmable Gate Array);单纯1 功能接口器件可以为温度传感器。
权利要求
1.一种1 总线通信死锁解决方法;所述1 总线包括一条串行SDA数据线和一条串行SCL时钟线;所述1 总线设置有一个主机和至少一个从机;其特征在于1 总线通信死锁解决方法包括基于主机的执行方法,所述基于主机的执行方法包括以下步骤A、监测1 总线的工作状态;若主机不能向1 总线从机发送探测信息,则1 总线处于死锁状态;B、当1 总线处于死锁状态,主机模块复位,控制SCL时钟线产生时钟脉冲信号,使处于死锁状态的1 从机解锁;C、从机解锁后,主机模块重新初始化,使1 总线通信重新正常工作。
2.根据权利要求1所述的1 总线通信死锁解决方法,其特征在于所述步骤A包括以下分步骤AUI2C总线系统正常运行后首先进入一个系统延时期后进入步骤A2,同时对主机计数器清零;所述1 总线系统延时期默认为0. 5s ;A2、采用主机写的方式开始向1 总线从机η发送探测信息,进入步骤A3 ;A3、若此时1 总线运行正常,步骤A2正确完成,主机收到从机的应答位,I2C总线系统返回步骤Al,继续监测1 总线的状态;若1 总线处于死锁状态,步骤A2将不能正确完成, 主机收不到从机的应答位,进入步骤B。
3.根据权利要求2所述的1 总线通信死锁解决方法,其特征在于所述步骤B包括以下分步骤Bi、判断本次监测中主机是否向所有从机发送完探测信息,若没有发送完则返回步骤 Al中,继续本次的监测;若发送完进入步骤B2 ;B2、判断连续监测次数是否大于监测门限次数3,若连续监测次数不大于3,返回步骤 Al,继续另一轮的监测;连续监测次数大于3则进入步骤B3 ;B3、主机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,进入步骤B4 ;B4、将SDA数据线所在IO 口线设置为高电平状态,控制SCL时钟线连续产生9个时钟脉冲信号,此步骤功能可以使处于死锁状态的从机解锁,进入步骤C。
4.根据权利要求3所述的1 总线通信死锁解决方法,其特征在于所述步骤A2中η 为11,N为1 总线系统中的从机总数;所述探测信息包括起始位、从机地址字节、若干探测数据字节和停止位;所述步骤B2中连续监测次数为主机计数器计数次数,每完成一次监测,主机计数器变累加一次。
5.根据权利要求1、2、3或4所述的1 总线通信死锁解决方法,其特征在于所述从机为具有可编程功能的模块或者单纯1 功能接口器件。
6.根据权利要求5所述的1 总线通信死锁解决方法,其特征在于还包括基于具有可编程功能的从机的执行方法,所述基于具有可编程功能的从机的执行方法包括以下步骤D、监测从机工作状态及从机错误计数器,当错误计数器技术次数超过监测错误门限次数时,表明1 总线处于死锁状态;监测错误门限次数默认为3次;E、当1 总线处于死锁状态,从机模块复位,设置SCL时钟线和SDA数据线为开漏模式的普通IO 口,再重新初始化从机模块,使I2C总线通信重新正常工作。
7.根据权利要求6所述的1 总线通信死锁解决方法,其特征在于所述步骤D包括DU 1 计时器清零,1 计时器用于监测在设定时间内从机是否收到来自主机的探测信息,进入步骤D2 ;无设定时间时,默认时间为Is ;D2、判断是否收到来自主机发送的探测信息,若收到进入步骤D3 ;若没有收到进入步骤D5 ;D3、从机错误计数器清零,错误计数器用于记录从机连续未收到主机探测信息的次数, 进入步骤D4 ;D4、lt总线系统延时一段时间后进入下一轮的监测,进入步骤Dl ;1 总线系统延时时间默认为Is ;D5、fC计时器启动开始计时,进入步骤D6 ;D6、判断1 计时器是否溢出,若没有溢出返回步骤D2继续监测从机是否收到主机的探测信息;若1 计时器溢出则表示本次监测结束且没有监测到从机接收到主机的探测信息,进入步骤D7 ;D7、错误计数器加1之后进入步骤D8 ;D8、判断错误计数器计数次数是否大于监测错误门限次数3次,若没有则进入步骤Dl 重新开始下一轮的监测;若错误计数器计数次数大于监测错误门限次数3次则表明监测到一次1 通讯错误,即表明此时1 总线是处于死锁状态,进入步骤E。
8.根据权利要求5所述的1 总线通信死锁解决方法,其特征在于所述从机为单片机或者FPGA。
9.根据权利要求5所述的1 总线通信死锁解决方法,其特征在于所述从机为温度传感器。
全文摘要
本发明公开了一种I2C总线通信死锁解决方法;I2C总线包括一条串行SDA数据线和一条串行SCL时钟线;I2C总线设置有一个主机和至少一个从机;I2C总线通信死锁解决方法包括基于主机的执行方法,包括以下步骤A、监测I2C总线的工作状态;若主机不能向I2C总线从机发送探测信息,则I2C总线处于死锁状态;B、当I2C总线处于死锁状态,主机模块复位,控制SCL时钟线产生时钟脉冲信号,使处于死锁状态的I2C从机解锁;C、从机解锁后,主机模块重新初始化,使I2C总线通信重新正常工作。本发明提供的I2C总线通信死锁解决方法,不增加额外电路,不增加附加成本,I2C总线通信死锁解决方法适合于任何从机,能够快速准确死锁问题,不会对设备的正常运行带来不利影响。
文档编号G06F13/40GK102521187SQ20111038727
公开日2012年6月27日 申请日期2011年11月29日 优先权日2011年11月29日
发明者廖国平, 肖军 申请人:广东东研网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1