发明内容
有鉴于此,本申请提出一种复杂可编程逻辑器件CPLD,可有效管理一台主机设备上的多个I2C设备。
本申请还提出一种I2C设备管理方法,可有效管理一台主机设备上的多个I2C设备。
为达到上述目的,本申请实施例的技术方案是这样实现的:
一种复杂可编程逻辑器件CPLD,其特征在于,包括:内部整合电路I2C设备ID解析模块、I2C的串行时钟线SCL控制模块和I2C的串行数据线SDA控制模块,其中:
I2C设备ID解析模块,用于配置I2C设备ID分配与解析表,所述I2C设备ID分配与解析表用于设置主机的每一I2C设备的设备ID与该I2C设备所在SCL分组和SDA模拟开关分组的对应关系;接收I2C控制器发送的待访问控制的I2C设备的ID,在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组,将所述SCL分组发送给SCL控制模块,将所述SDA模拟开关分组发送给SDA控制模块;
SCL控制模块,用于配置SCL选通控制表,所述SCL选通控制表用于设置每一SCL分组与SCL选通控制寄存器值的对应关系;接收来自I2C设备ID解析模块的SCL分组信息,根据所述SCL分组信息和所述SCL选通控制表,选通相应的SCL;
SDA控制模块,用于配置SDA选通控制表,所述SDA选通控制表用于设置每一SDA模拟开关分组与SDA选通控制寄存器值的对应关系;接收来自I2C设备ID解析模块的SDA模拟开关分组信息,根据所述SDA模拟开关分组信息和所述SDA选通控制表,选通相应的SDA模拟开关。
一种I2C设备管理方法,其特征在于,包括以下步骤:
预先在复杂可编程逻辑器件CPLD中配置内部整合电路I2C设备ID分配与解析表、I2C的串行时钟线SCL选通控制表和I2C的串行数据线SDA选通控制表;
所述I2C设备ID分配与解析表用于设置主机的每一I2C设备的设备ID与该I2C设备所在SCL分组和SDA模拟开关分组的对应关系;所述SCL选通控制表用于设置每一SCL分组与SCL选通控制寄存器值的对应关系,所述SDA选通控制表用于设置每一SDA模拟开关分组与SDA选通控制寄存器值的对应关系;
CPLD通过任意总线接收到I2C控制器发送的待访问控制的I2C设备的ID,在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组;
CPLD根据所述SCL分组和所述SCL选通控制表,选通相应的SCL;根据所述SDA模拟开关分组和所述SDA选通控制表,选通相应的SDA模拟开关。
本申请的有益效果为,通过为主机的所有I2C设备分配唯一的设备ID,配置设备ID与I2C设备所在SCL分组和SDA模拟开关分组的对应关系,当CPLD接收到待访问控制的I2C设备的设备ID时,根据上述对应关系选通待访问控制的I2C设备ID对应的SCL和SDA模拟开关,从而实现对主机的多个I2C设备进行有效管理。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下通过具体实施例并参见附图,对本发明进行详细说明。
本申请中,预先为主机的所有I2C设备分配唯一的设备ID,配置设备ID与I2C设备所在SCL分组和SDA模拟开关分组的对应关系,配置每一SCL分组与SCL选通控制寄存器值的对应关系,配置每一SDA模拟开关分组与SDA选通控制寄存器值的对应关系。
当I2C控制器(或具有I2C控制器的器件,如微控制器CPU等)访问控制任一I2C设备时,I2C控制器将该I2C设备的设备ID发送给CPLD,CPLD解析出此设备ID对应的SCL分组和SDA模拟开关分组,从而根据SCL分组与SCL选通控制寄存器值的对应关系选通相应的SCL,根据SDA模拟开关分组与SDA选通控制寄存器值的对应关系选通相应的SDA对应的模块开关,当待访问控制的上述I2C设备所对应的SCL和SDA模拟开关同时选通,即打开上述I2C设备所对应的SCL和SDA模拟开关,关闭其它SCL和SDA模拟开关,I2C控制器就可以正常访问上述I2C设备了。
本申请方案可实现对不同主机的统一管理,也就是说,当本申请方案应用到其它不同的主机时,不同主机的硬件I2C总线拓扑结构可根据各主机I2C设备的实际位置进行差异化设计,并且可以采用统一的软件对不同主机的I2C设备进行统一管理,无须针对不同的主机开发不同的软件。
假设一台主机设备A有32个I2C设备,其I2C总线拓扑结构如图1所示,I2C控制器要对这32个I2C设备(设备00~1F)进行管理。I2C控制器的I2C总线的时钟信号SCL进CPLD,经过CPLD的SCL控制模块后分成4组(SCLx(x=0~3)),每组挂接8个I2C设备。I2C控制器的I2C总线的数据信号SDA经过8个模拟开关(模拟开关0~7),每个模拟开关后挂接4个I2C设备,模拟开关的选通控制信号SDA_SELx(x=0~7)由CPLD的SDA控制模块提供。下面以具体实施例来说明如何对主机设备上的多个I2C设备进行有效的管理。
本申请实施例的装置结构如图2所示,一种复杂可编程逻辑器件CPLD,包括:I2C设备ID解析模块、SCL控制模块和SDA控制模块,其中:
I2C设备ID解析模块,用于配置I2C设备ID分配与解析表,所述I2C设备ID分配与解析表用于设置所述主机每一I2C设备的设备ID与该I2C设备所在SCL分组和SDA模拟开关分组的对应关系,结合图1硬件的I2C总线拓扑结构情况,I2C设备ID分配与解析表的示意表如下表1所示:
I2C设备名称 |
I2C设备ID |
SCL分组 |
SDA模拟开关分组 |
设备00 |
00 |
SCL0 |
模拟开关0 |
设备01 |
01 |
SCL0 |
模拟开关1 |
...... |
...... |
...... |
...... |
设备08 |
08 |
SCL1 |
模拟开关0 |
设备09 |
09 |
SCL1 |
模拟开关1 |
...... |
...... |
...... |
...... |
设备16 |
16 |
SCL2 |
模拟开关6 |
设备17 |
17 |
SCL2 |
模拟开关7 |
...... |
...... |
...... |
...... |
设备1E |
1E |
SCL3 |
模拟开关6 |
设备1F |
1F |
SCL3 |
模拟开关7 |
表1
从表1可以看出,所述I2C设备ID分配与解析表包括以下表项:I2C设备ID、SCL分组、SDA模拟开关分组,其中,所述I2C设备ID对应于该I2C设备所在的SCL分组和SDA模拟开关分组,此外,还可以包含I2C设备名称,每一I2C设备名称对应唯一的I2C设备ID,方便用户识别I2C设备。
I2C设备ID为I2C控制器与CPLD双方约定的、为每一个I2C设备所分配的唯一的ID。I2C设备ID与I2C设备所在的SCL分组、SDA模拟开关分组的对应关系是根据硬件的I2C总线实际拓扑结构确定的。
例如,通过表1,可以知道为设备16分配的唯一设备ID为16,而通过图1中I2C总线实际拓扑结构可知设备16所在的SCL分组为SCL2,所在的SDA模拟开关分组为模拟开关6,因此,设备16的设备ID=16,对应于SCL2和模拟开关6。
当I2C控制器要访问控制任一I2C设备时,所述I2C设备ID解析模块,接收I2C控制器发送的待访问控制的I2C设备的ID,在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组,将所述SCL分组发送给SCL控制模块,将所述SDA模拟开关分组发送给SDA控制模块。
当CPLD接收到I2C控制器发送的待访问控制的I2C设备的ID后,还可以先判断所述I2C设备ID是否已存在于CPLD配置的I2C设备ID分配与解析表中,若不存在,则表示所述I2C设备ID,需要进行异常处理,即将所述I2C设备ID不合法的信息输出;若已存在,则在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组。
例如,若I2C控制器需要访问控制设备16,I2C控制器将设备16的设备ID=16通过任意总线(比如,Local BUS)发送给CPLD,CPLD接收到设备ID=16的信息后,就会在自身预先配置的I2C设备ID分配与解析表的I2C设备ID表项中查找16,如表1所示,当16存在于I2C设备ID分配与解析表中时,也就是判断设备ID=16是合法的,然后查找16对应的SCL分组SCL2和SDA模拟开关分组模拟开关6,将SCL2发送给SCL控制模块,将模拟开关6发送给SDA控制模块。
SCL控制模块,用于配置SCL选通控制表,所述SCL选通控制表用于设置所述每一SCL分组与SCL选通控制寄存器值的对应关系,SCL选通控制表的示意表如下表2所示:
SCL分组 |
SCL选通控制寄存器[1:0]值 |
对应选通的I2C设备 |
SCL0 |
00 |
设备00~07 |
SCL1 |
01 |
设备08~0F |
SCL2 |
10 |
设备10~17 |
SCL3 |
11 |
设备18~1F |
表2
如表2所示,SCL选通控制表包括以下表项:SCL分组、SCL选通控制寄存器值、对应选通的I2C设备;其中,SCL分组对应于所述I2C设备ID分配与解析表中的SCL分组,每一SCL分组对应唯一的SCL选通控制寄存器值,所述SCL选通控制寄存器值对应选通该SCL分组内的所有I2C设备。
CPLD对外的时钟信号SCLx(x=0~3)内部均有选通控制寄存器,当I2C设备ID解析模块将SCL分组发送给SCL控制模块时,SCL控制模块还用于接收来自I2C设备ID解析模块的SCL分组信息,根据所述SCL分组和所述SCL选通控制表,选通相应的SCL,即配置SCL选通控制寄存器值为所述SCL分组对应的寄存器值,也就选通了相应的SCL。
例如,当I2C设备ID解析模块将设备ID=16对应的SCL分组SCL2发送给SCL控制模块时,SCL控制模块根据SCL2和SCL选通控制表(如表2),选通SCL2,其它SCL分组关闭,即将SCL2对应的寄存器值配置为10,此时SCL就选通了I2C设备10~17。
SDA控制模块,用于配置SDA选通控制表,所述SDA选通控制表用于设置所述每一SDA模拟开关分组与SDA选通控制寄存器值的对应关系,SDA选通控制表的示意表如下表3所示:
SDA模拟开关分组 |
SDA选通控制寄存器[2:0]值 |
对应选通的I2C设备 |
模拟开关0 |
000 |
设备00、08、10、18 |
模拟开关1 |
001 |
设备01、09、11、19 |
模拟开关2 |
010 |
设备02、0A、12、1A |
模拟开关3 |
011 |
设备03、0B、13、1B |
模拟开关4 |
100 |
设备04、0C、14、1C |
模拟开关5 |
101 |
设备05、0D、15、1D |
模拟开关6 |
110 |
设备06、0E、16、1E |
模拟开关7 |
111 |
设备07、0F、17、1F |
表3
从表3可知,所述SDA选通控制表包括以下表项:SDA模拟开关分组、SDA选通控制寄存器值、对应选通的I2C设备;其中,SDA模拟开关分组对应于所述I2C设备ID分配与解析表中的SDA模拟开关分组,每一SDA模拟开关分组对应唯一的SDA选通控制寄存器值,所述SDA选通控制寄存器值对应选通该SDA模拟开关分组内的所有I2C设备。
SDA信号由于是双向信号,没有经过CPLD进行切换,而是经过外部的模拟开关进行切换,模拟开关的选通由CPLD的SDA控制模块控制,这些选通信号的控制和SCL类似,CPLD内部有一个选通控制寄存器,SDA控制模块根据I2C设备ID解析模块发送的SDA模拟开关分组信息选通相应的数据信号的模拟开关SDA_SELx(x=0~7)。
也就是,当I2C设备ID解析模块将SDA模拟开关分组发送给SDA控制模块时,SDA控制模块还用于接收所述SDA模拟开关分组信息,根据所述SDA模拟开关分组和所述SDA选通控制表,选通相应的SDA模拟开关,即配置SDA选通控制寄存器值为所述SDA模拟开关分组对应的寄存器值,也就选通了相应的SDA模拟开关。
例如,当I2C设备ID解析模块将设备ID=16对应的SDA模拟开关分组即模拟开关6,发送给SDA控制模块时,SDA控制模块根据模拟开关6和SDA选通控制表(如表3),选通SDA_SEL6,即打开模拟开关6,其它模拟开关关闭,也就是将模拟开关6对应的寄存器值配置为110,此时SDA就选通了I2C设备06、0E、16、1E。
因此,当选通SCL2和模拟开关6时,I2C控制器就可以正常访问控制设备16了。
本申请实施例的方法流程如图3所示,一种I2C设备管理方法,包括以下步骤:
步骤301:预先在复杂可编程逻辑器件CPLD中配置内部整合电路I2C设备ID分配与解析表、I2C的串行时钟线SCL选通控制表和I2C的串行数据线SDA选通控制表。
所述I2C设备ID分配与解析表用于设置主机的每一I2C设备的设备ID与该I2C设备所在SCL分组和SDA模拟开关分组的对应关系,包括以下表项:I2C设备ID、SCL分组、SDA模拟开关分组;其中,所述I2C设备ID对应于该I2C设备所在的SCL分组和SDA模拟开关分组,此外,还可以包含I2C设备名称,每一I2C设备名称对应唯一的I2C设备ID,方便用户识别I2C设备。
所述SCL选通控制表用于设置所述每一SCL分组与SCL选通控制寄存器值的对应关系,包括以下表项:SCL分组、SCL选通控制寄存器值、对应选通的I2C设备;其中,SCL分组对应于所述I2C设备ID分配与解析表中的SCL分组,每一SCL分组对应唯一的SCL选通控制寄存器值,所述SCL选通控制寄存器值对应选通该SCL分组内的所有I2C设备。
所述SDA选通控制表用于设置所述每一SDA模拟开关分组与SDA选通控制寄存器值的对应关系,包括以下表项:SDA模拟开关分组、SDA选通控制寄存器值、对应选通的I2C设备;其中,SDA模拟开关分组对应于所述I2C设备ID分配与解析表中的SDA模拟开关分组,每一SDA模拟开关分组对应唯一的SDA选通控制寄存器值,所述SDA选通控制寄存器值对应选通该SDA模拟开关分组内的所有I2C设备。
步骤302:CPLD通过任意总线接收到I2C控制器发送的待访问控制的I2C设备的ID,在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组。
较佳地,所述CPLD通过任意总线接收到I2C控制器发送的该I2C设备的ID之后,CPLD判断所述I2C设备ID是否已存在于所述I2C设备ID分配与解析表中,若不存在,则将所述I2C设备ID不合法的信息输出,若已存在,则在所述I2C设备ID分配与解析表中查找该I2C设备ID对应的SCL分组和SDA模拟开关分组。
步骤303:CPLD根据所述SCL分组和所述SCL选通控制表,选通相应的SCL;根据所述SDA模拟开关分组和所述SDA选通控制表,选通相应的SDA模拟开关。
本申请可以实现对一台主机的多个I2C设备进行有效管理,此外,本申请方案应用于多款不同的主机时,软件不需要关注硬件的I2C总线拓扑结构,只需要和硬件CPLD约定,预先为所有I2C设备分配唯一的ID,然后与CPLD的I2C设备ID解析模块交互就可以间接访问和控制任一I2C设备,实现对不同主机的I2C设备的有效管理。
因此,针对不同的主机,本申请可以实现对不同主机的所有I2C设备进行硬件差异化设计、软件归一化管理的目的,也就是说,既可根据各主机的I2C设备实际位置对不同主机的I2C总线拓扑进行差异化设计,又可采用统一的软件对不同主机的I2C设备进行访问和控制,当开发多款主机设备时,本申请的技术效果更加明显。
例如,假设一台主机设备B有8个I2C设备,主机B的I2C设备可以和主机A的I2C设备是不同的,此处为了举例的方便,假设这8个I2C设备与主机A的8个I2C设备是相同的,即为设备00、设备01、设备08、设备09、设备16、设备17、设备1E、设备1F。和主机A一样,主机B的I2C拓扑结构也完全符合硬件自身的设计要求,其硬件I2C总线拓扑结构根据这8个I2C设备的实际位置进行设计,比如,采用就近原则对I2C设备进行分组,将相距较近的I2C设备分在一组。如图4所示,从图中可看出,由于主机B实现硬件的差异化设计,其硬件I2C总线拓扑结构与上述主机A是有差异的,若按照现有技术,基于主机A的硬件I2C总线拓扑结构设计的软件无法应用于主机B,需要重新根据主机B的硬件I2C总线拓扑结构进行软件开发,但采用本申请技术方案,可实现软件的归一化管理,也就是说,应用于主机A的软件也可以同样应用于主机B,无须重新进行软件开发,具体实现过程如下:
每个主机内部的I2C设备ID分配与解析表会根据各主机的实际硬件I2C拓扑结构不同而不同,主机B的I2C设备ID分配与解析表如下表4所示:
表4
主机B的SCL选通控制表如下表5所示:
SCL分组 |
SCL选通控制寄存器值 |
对应选通的I2C设备 |
SCL0 |
0 |
设备00、01、16、17 |
SCL1 |
1 |
设备08、09、1E、1F |
表5
主机B的SDA选通控制表如下表6所示:
SDA模拟开关分组 |
SDA选通控制寄存器值 |
对应选通的I2C设备 |
模拟开关0 |
0 |
设备00、01、08、09 |
模拟开关1 |
1 |
设备16、17、1E、1F |
表6
例如,这里I2C控制器仍要访问控制设备16,则I2C控制器通过任意总线向CPLD的I2C设备ID解析模块中写入I2C设备ID值“16”,CPLD通过任意总线接收到I2C控制器发送的设备ID值“16”,当设备ID值“16”已存在于I2C设备ID分配与解析表(如上述表4)中时,CPLD在表4中查找到设备ID值“16”对应的SCL分组“SCL0”和SDA模拟开关分组“模拟开关1”。
CPLD根据SCL分组“SCL0”和SCL选通控制表(如上述表5),将“SCL0”对应的SCL选通控制寄存器值配置为0,选通相应的SCL;根据所述SDA模拟开关分组“模拟开关1”和SDA选通控制表(如上述表6),将“模拟开关1”对应的SDA选通控制寄存器值配置为1,选通相应的SDA模拟开关,从而选通I2C设备16,此时,I2C控制器就可以对I2C设备16进行访问和控制了。
通过实现软件的归一化管理,可以有效提高软件开发效率,降低软件维护成本,节省人力物力。通过实现硬件的差异化设计,有利于硬件信号完整性提升、降低物料成本和硬件设计复杂度和冗余度,从而提高硬件设计的简洁度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。