一种多级I2C总线控制方法与流程

文档序号:11691019阅读:300来源:国知局
本发明涉及微电子通信控制领域,具体涉及标准i2c总线控制技术。
背景技术
::i2c(inter-integratedcircuit)总线是由philips公司开发的两线式串行总线,用于连接微控制器及其外围设备,对各个节点的寻址是软寻址方式,节省了片选线,标准的寻址字节slam为7位,可以寻址127个单元。但多数i2c从设备的总线地址相当固定,比如在通信设备中常用的sfp,其i2c总线地址固定为0x50,当需要使用多个这种设备时,则需要用到i2c总线扩展技术,同时i2c总线拓扑将变复杂,对软件控制技术提出了挑战。现有的控制方式,比如linux中的i2c-mux,能够以树的形式记录这种i2c总线拓扑,树的每个节点代表一条i2c总线并反映总线间的父子关系,i2c-mux提供了一种智能访问这个拓扑中每条总线的方式,但每次访问都必须经历选通总线、访问总线、关闭总线3个步骤,以保证整个拓扑能被正确访问,这种方式虽然逻辑上相对简单,但访问效率非常低下。技术实现要素:针对现有i2c总线控制方案在访问效率上的缺陷,本发明的目的在于提供一种能够有效提高访问效率的i2c总线控制方案。为了达到上述目的,本采用如下的技术方案:一种多级i2c总线控制方法,所述控制方法将关闭总线、选通总线的操作延迟到访问总线之前。优选的,所述控制方法中将i2c多路选通通道的切换延时到下次操作同一多路选通的其它i2c总线时才进行;将i2c多路选通通道的关闭延时到下次操作同一上级总线的其它多路选通的下级总线时才进行。优选的,所述控制方法根据已知i2c总线索引,选通i2c总线。优选的,所述控制方法选通i2c总线包括以下步骤:1)如果存在上级i2c总线则先选通上级i2c总线,转(3);2)如果上级i2c总线存在某条其他的下级总线没有关闭,则关闭上级i2c总线下的这条下级总线;且将i2c多路选通通道的关闭延时到下次操作同一上级总线的其它多路选通的下级总线时才进行;3)如果这条i2c总线的多路选通未选通则用这条i2c总线的多路选通方法进行选通;且将i2c多路选通通道的切换延时到下次操作同一多路选通的其它i2c总线时才进行。本发明提供的多级i2c总线控制方法能够有效提高对i2c总线控制的智能性、便捷性、准确性、高效性,能够广泛适用于各种多级i2c总线拓扑结构。附图说明以下结合附图和具体实施方式来进一步说明本发明。图1为本发明方案中i2c总线控制系统框图;图2为本发明方案中i2c总线拓扑图;图3为本发明实例中i2c总线拓扑图;图4为本发明实例中注册i2c总线流程图;图5为本发明实例中关闭i2c总线流程图;图6为本发明实例中选通i2c总线流程图;图7为本发明实例中访问i2c总线流程图。具体实施方式为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。参见图1,本方案中的i2c总线控制系统100主要包括i2c总线控制模块110和i2c总线操作接口120两部分。其中,i2c总线控制模块110与相应的应用程序数据连接,并通过i2c总线操作接口120连接到对应的i2c主设备130,而i2c主设备130通过相应的i2c总线拓扑140连接到若干的i2c从设备150。参见图2,这里的i2c总线拓扑140为多级i2c总线,i2c主设备130通过一级总线连接至i2c多路选通设备141、142以及i2c从设备151。i2c多路选通设备141的通道a通过二级总线连接至i2c从设备152,i2c多路选通设备141的通道b通过二级总线连接至i2c从设备153。i2c多路选通设备142的通道a通过二级总线连接至i2c多路选通设备143,i2c多路选通设备142的通道b通过二级总线连接至i2c从设备154。i2c多路选通设备143的通道b通过三级总线连接至i2c从设备155。在该控制系统中,i2c总线控制模块110负责管理i2c拓扑,并向应用模块提供智能高效的访问i2c从设备的方法。i2c总线控制模块具体包括以下单元:(1)注册总线单元,用于已知上级i2c总线(或根总线)、多路选通设备及选通方法,向i2c总线拓扑注册这条i2c总线,并得到i2c总线索引。该注册总线单元注册一条i2c总线包括以下步骤:1)向i2c总线拓扑注册数据结构。2)关闭这条i2c总线。3)得到这条i2c总线的索引。(2)关闭总线单元,用于已知i2c总线索引,关闭这条i2c总线。该关闭总线单元关闭一条i2c总线包括以下步骤:1)如果存在上级i2c总线则先选通上级i2c总线,转(3)。2)如果这条i2c总线的多路选通未关闭则用这条i2c总线的多路选通方法进行关闭。(3)选通总线单元,用于已知i2c总线索引,选通这条i2c总线。该选通总线单元选通一条i2c总线包括以下步骤:1)如果存在上级i2c总线则先选通上级i2c总线,转(3)。2)如果上级i2c总线存在某条其他的下级总线没有关闭,则关闭上级i2c总线下的这条下级总线。这步将i2c多路选通通道的关闭延时到下次操作同一上级总线的其它多路选通的下级总线时才进行。3)如果这条i2c总线的多路选通未选通则用这条i2c总线的多路选通方法进行选通。这步将i2c多路选通通道的切换延时到下次操作同一多路选通的其它i2c总线时才进行。(4)访问从设备单元,用于已知i2c总线索引,访问这条i2c总线上的从设备。该访问从设备单元访问一条i2c总线上的从设备包括以下步骤:1)选通这条i2c总线,转(1)。2)调用i2c总线操作接口访问从设备。据此构成的i2c总线控制模块110中的各功能单元间通过预定义的接口(如下述应用实例中的选通i2c总线的接口i2c_mux_select)进行交互,实现i2c总线控制模块的各项功能。在该控制系统中,i2c总线操作接口120用于把i2c驱动所提供的接口规整后向i2c总线控制模块提供规整后的接口。规整后的接口包括i2c主设备对从设备的读访问操作、写访问操作、组合访问操作等。在此基础上,本方案中通过采用延迟通道切换技术,在保证i2c总线拓扑能被正确访问的前提下,将总线关闭、总线选通的操作延迟到访问总线之前,且仅在确有必要的情况下才操作。针对上述方案,下面以图3所示的i2c总线拓扑为例,进一步说明本控制方案的具体实施过程,具体如下:1、本实例中i2c总线拓扑中各数据结构如下:(1)i2c总线操作接口(2)本实例中i2c多路选通设备数据结构如下:(3)本实例中i2c总线数据结构如下:2、基于上述的方案,本实例中注册一条i2c选通设备包括以下步骤:inti2c_mux_dev_register(int*dev_index,i2c_mux_dev_t*dev);i2c_mux_dev_register为注册i2c选通设备的接口。(1)注册并保存这个i2c选通设备的数据结构。(2)得到这个i2c选通设备的索引。3、本实例中注册一条i2c总线包括以下步骤,如图4所示:inti2c_mux_register(int*mux_index,i2c_mux_t*i2c_mux);i2c_mux_register为注册i2c总线的接口。(1)向i2c总线拓扑注册数据结构。index=find_free_index();i2c_mux_table[index]=i2c_mux;(2)关闭这条i2c总线。_i2c_mux_close(index);(3)得到这条i2c总线索引。*mux_index=index。4、本实例中关闭一条i2c总线包括以下步骤,如图5所示:(1)确定是否存在上级i2c总线则先选通上级i2c总线,如果不存在转入步骤(3);若存在转入步骤(2);(2)先选通上级i2c总线;(3)确定该条i2c总线的多路选通是否关闭,若关闭,转入步骤(5),若没有关闭,转入步骤(4);(4)用这条i2c总线的多路选通方法进行关闭;(5)结束。据此,本实例中关闭一条i2c总线的具体实施过程如下:staticint_i2c_mux_close(intmux_index);_i2c_mux_close为关闭i2c总线的接口。(1)如果存在上级i2c总线则先选通上级i2c总线。i2c_mux=i2c_mux_table[mux_index];if(temp->parent_index!=-1)_i2c_mux_select(temp->parent_index);(2)如果这条i2c总线的多路选通未关闭则用这条i2c总线的多路选通方法进行关闭。5、本实例中选通一条i2c总线包括以下步骤,如图6所示:(1)判断是否存在上级i2c总线,若存在转入步骤(2);若不存在转入步骤(3);(2)优先选通上级i2c总线;(3)判断上级i2c总线是否存在旁级总线没有关闭;若旁级总线关闭,转入步骤(5);若存在旁级总线没有关闭,则转入步骤(4);这里的旁级总线是指同一上级总线的非同多路选通设备下的下级总线。(4)关闭上级i2c总线下的这条下级总线;(5)判断这条i2c总线的多路选通是否选通;若选通,转入步骤(7);若没有选通,转入步骤(6);(6)用这条i2c总线的多路选通方法进行选通;(7)结束。据此,本实例中选通一条i2c总线的具体实施过程如下:staticint_i2c_mux_select(intcurrent_index);_i2c_mux_select为选通i2c总线的接口。(1)如果存在上级i2c总线则先选通上级i2c总线;current=i2c_mux_table[current_index];if(current->parent_index!=-1)_i2c_mux_select(current->parent_index);(2)如果上级i2c总线存在其他多路选通设备的下级总线没有关闭,则关闭上级i2c总线下的这条下级总线;(3)如果这条i2c总线的多路选通未选通则用这条i2c总线的多路选通方法进行选通;6、本实例中访问一条i2c总线包括以下步骤,如图7所示:inti2c_mux_read(intmux_index,uint32addr,uint8*buf,intlen);inti2c_mux_write(intmux_index,uint32addr,uint8*buf,intlen);inti2c_mux_combine(intmux_index,uint32addr,uint8*tx_data,inttx_len,uint8*rx_data,intrx_len);i2c_mux_xxx为访问i2c总线的接口。(1)选通这条i2c总线;_i2c_mux_select(mux_index);(2)调用标准i2c总线操作接口访问从设备;i2c_mux=i2c_mux_table[mux_index];i2c_mux->bus->i2c_xxx(addr,......)。7、本实例中注册i2c总线拓扑步骤如下:(1)注册一级总线bus0;i2c_simulate_host为模拟i2c控制器操作总线的接口。bus0.bus=i2c_simulate_host;bus0.parent_index=-1;bus0.dev_index=-1;i2c_mux_register_new(&bus0_index,&bus0);(2)注册i2c多路选通设备;pca9547_select为pca9547的选通方法,默认选通通道0。mux0.select=pca9547_select;mux0.current=0;mux0.arg=0x70;i2c_mux_dev_register(&mux0_index,&mux0);mux1.select=pca9547_select;mux1.current=0;mux1.arg=0x71;i2c_mux_dev_register(&mux1_index,&mux1);(3)注册二级总线bus1-4;bus1.parent_index=bus0_index;bus1.dev_index=mux0_index;bus1.dev_channel=0;i2c_mux_register_new(&bus1_index,&bus1);bus2.parent_index=bus0_index;bus2.dev_index=mux0_index;bus2.dev_channel=1;i2c_mux_register_new(&bus2_index,&bus2);bus3.parent_index=bus0_index;bus3.dev_index=mux1_index;bus3.dev_channel=0;i2c_mux_register_new(&bus3_index,&bus3);bus4.parent_index=bus0_index;bus4.dev_index=mux1_index;bus4.dev_channel=1;i2c_mux_register_new(&bus4_index,&bus4)。8、本实例中访问i2c总线示例如下:(1)访问一级总线下的设备;i2c_mux_xxx(bus0_index,0x4c,...);(2)访问二级总线下的设备;i2c_mux_xxx(bus1_index,0x50,...);i2c_mux_xxx(bus2_index,0x50,...);i2c_mux_xxx(bus3_index,0x50,...);i2c_mux_xxx(bus4_index,0x50,...)。由上可知,本实例中i2c多路选通通道的切换被延时到下次操作同一多路选通的其他i2c总线时才进行,i2c多路选通通道的关闭被延时到下次操作同一上级总线的其他多路选通的下级总线时才进行,以上技术称为延时切换技术,有效提高了访问效率。以两级总线为例,两级总线时最大能减少2/3的无效操作,n级总线时最大能减少(2n-2)/(2n-1)的无效操作,有效提高访问效率。再者基于上述实例方案,能实现对所有类型的i2c主设备、从设备、多路选通设备组成的任意级数的i2c总线拓扑的高效访问,其原理都如上所述,此处不加以赘述。以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1