一种I2C总线通信死锁解决方法技术

技术编号:7508740 阅读:595 留言:0更新日期:2012-07-11 07:30
本发明专利技术公开了一种I2C总线通信死锁解决方法;I2C总线包括一条串行SDA数据线和一条串行SCL时钟线;I2C总线设置有一个主机和至少一个从机;I2C总线通信死锁解决方法包括基于主机的执行方法,包括以下步骤:A、监测I2C总线的工作状态;若主机不能向I2C总线从机发送探测信息,则I2C总线处于死锁状态;B、当I2C总线处于死锁状态,主机模块复位,控制SCL时钟线产生时钟脉冲信号,使处于死锁状态的I2C从机解锁;C、从机解锁后,主机模块重新初始化,使I2C总线通信重新正常工作。本发明专利技术提供的I2C总线通信死锁解决方法,不增加额外电路,不增加附加成本,I2C总线通信死锁解决方法适合于任何从机,能够快速准确死锁问题,不会对设备的正常运行带来不利影响。

【技术实现步骤摘要】
一种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总线通信死锁解决方法基于主机的执行方法适合于任何从机,对从机是否本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:肖军廖国平
申请(专利权)人:广东东研网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术