一种交换机及数据访问方法
阅读说明:本技术 一种交换机及数据访问方法 (Switch and data access method ) 是由 商轲 雷雄 孙东 卢杰 薛建军 于 2021-06-30 设计创作,主要内容包括:本发明实施例提供了一种交换机及数据访问方法,涉及通信技术领域,可以提高CPU访问I2C器件的效率,减少访问I2C器件对CPU的占用。本发明实施例的交换机包括:中央处理器CPU、复杂可编程逻辑器件CPLD芯片和多个集成电路总线I2C器件。CPU通过串行外设接口SPI与CPLD芯片连接;CPLD芯片包括多个I2C模拟接口,每个I2C模拟接口通过两个I/O管脚模拟实现;CPLD芯片包括的每个I2C模拟接口与不同的I2C器件连接。CPU用于通过SPI向CPLD芯片发送访问指令;CPLD芯片用于基于访问指令通过I2C模拟接口对I2C器件进行读写操作。(The embodiment of the invention provides a switch and a data access method, relates to the technical field of communication, and can improve the efficiency of a CPU (Central processing Unit) accessing an I2C device and reduce the occupation of the access I2C device on the CPU. The switch of the embodiment of the invention comprises: the device comprises a Central Processing Unit (CPU), a Complex Programmable Logic Device (CPLD) chip and a plurality of integrated circuit bus I2C devices. The CPU is connected with the CPLD chip through a Serial Peripheral Interface (SPI); the CPLD chip comprises a plurality of I2C analog interfaces, and each I2C analog interface is realized by simulating two I/O pins; each I2C analog interface included in the CPLD chip is connected to a different I2C device. The CPU is used for sending an access instruction to the CPLD chip through the SPI; the CPLD chip is used for reading and writing the I2C device through the I2C analog interface based on the access instruction.)
技术领域
本发明涉及通信
技术领域
,特别是涉及一种交换机及数据访问方法。背景技术
交换机单板上的中央处理器(central processing unit,CPU)可以通过集成电路之间(Inter-Integrated Circuit,I2C)总线对单板上包括的带电可擦可编程只读存储器(Electrically Erasable Programmable read only memory,EEPROM)、温感、实时时钟(Real_Time Clock,RTC)、光模块等I2C器件进行访问。I2C是一种低速串行总线,由串行时钟线(Serial Clock line,SCL)和串行数据线(Serial Data,SDA)两根线组成。
如图1所示,交换机单板上的不同类型的I2C器件可以连接到CPU的不同I2C接口,比如图1中的温感芯片、RTC芯片和EEPROM连接到CPU的I2C1接口;电源和风扇连接到CPU的I2C2接口;模拟开关一端连接业务接口模块0~N,另一端连接到CPU的I2C3接口,其余I2C器件连接到CPU的I2C4接口。
交换机单板上的I2C器件较多,CPU需要每隔一段时间通过I2C总线对这些I2C器件进行一轮访问,因I2C总线的速率较低,CPU访问大量的I2C器件将会占用CPU大量的时间,访问效率较低,且CPU在访问I2C器件时无法进行其他业务。
发明内容
本发明实施例的目的在于提供一种交换机及数据访问方法,以提高CPU访问I2C器件的效率,减少访问I2C器件对CPU的占用。具体技术方案如下:
第一方面,本发明实施例提供了一种交换机,包括:中央处理器CPU、复杂可编程逻辑器件CPLD芯片和多个集成电路总线I2C器件;
所述CPU通过串行外设接口SPI与所述CPLD芯片连接;所述CPLD芯片包括多个I2C模拟接口,每个I2C模拟接口通过两个I/O管脚模拟实现;所述CPLD芯片包括的每个I2C模拟接口与不同的I2C器件连接;
所述CPU用于通过所述SPI向所述CPLD芯片发送访问指令;
所述CPLD芯片用于基于所述访问指令通过I2C模拟接口对I2C器件进行读写操作。
可选的,所述CPLD芯片的第一I2C模拟接口连接于多个物理地址不同的I2C器件;和/或,
所述CPLD芯片的第二I2C模拟接口连接于模拟开关,所述模拟开关连接于多个物理地址相同的I2C器件,所述模拟开关用于选择开启或关闭与所述模拟开关连接的各I2C器件的访问通道。
可选的,所述CPU包括I2C接口,所述CPU通过I2C接口与指定I2C器件连接;或者,
所述CPLD芯片的其中一个I2C模拟接口与所述指定I2C器件相连。
可选的,所述指定I2C器件包括电源和风扇。
第二方面,本发明实施例提供了一种数据访问方法,应用于CPU,所述CPU位于第一方面任一项所述的交换机中,所述方法包括:
所述CPU通过SPI向CPLD芯片发送访问指令,所述访问指令包括待访问I2C器件的物理地址和寄存器地址,以使得所述CPLD芯片基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,得到读写结果;
所述CPU通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果。
可选的,所述访问指令为写入指令,所述写入指令携带待写入数据;
所述CPU通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果,包括:
所述CPU通过所述SPI从所述CPLD芯片中获取对所述待写入数据的写入结果,所述写入结果用于表示写入成功或写入失败。
可选的,所述访问指令为读取指令;所述CPU通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果,包括:
所述CPU通过所述SPI从所述CPLD芯片中获取待读取数据,所述待读取数据为所述CPLD芯片通过I2C模拟接口从所述待访问I2C器件中,所述寄存器地址对应的寄存器中读取的数据。
第三方面,本发明实施例提供了一种数据访问方法,应用于CPLD芯片,所述CPLD芯片位于第一方面任一项所述的交换机中,所述方法包括:
通过SPI接收CPU发送的访问指令,所述访问指令包括待访问I2C器件的物理地址和寄存器地址;
基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,并存储读写结果,以便所述CPU通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果。
可选的,所述访问指令为写入指令,所述写入指令携带待写入数据;
所述基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,并存储读写结果,包括:
通过所述CPLD芯片的I2C模拟接口,向所述CPLD芯片连接的各I2C器件发送地址信号,所述地址信号包括所述待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向所述CPLD发送的确认消息,所述确认消息为所述待访问I2C器件接收到所述地址信号后,在确认所述地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与所述待访问I2C器件之间的I2C模拟接口,将所述待写入数据写入所述待访问I2C器件中所述寄存器地址对应的寄存器;
通过与所述待访问I2C器件之间的I2C模拟接口,接收所述待访问I2C器件发送的写入响应,并基于所述写入响应存储对所述待写入数据的写入结果,所述写入结果用于表示写入成功或写入失败。
可选的,所述访问指令为读取指令;所述基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,并存储读写结果,包括:
通过所述CPLD芯片的I2C模拟接口,向所述CPLD芯片连接的各I2C器件发送地址信号,所述地址信号包括所述待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向所述CPLD发送的确认消息,所述确认消息为所述待访问I2C器件接收到所述地址信号后,在确认所述地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与所述待访问I2C器件之间的I2C模拟接口,从所述待访问I2C器件中,所述寄存器地址对应的寄存器中读取待读取数据;
存储所述待读取数据,以便所述CPU通过所述SPI从所述CPLD芯片中获取所述待读取数据。
可选的,所述方法还包括:
若通过SPI总线接收到所述CPU对指定I2C模拟接口的恢复命令,则将所述指定I2C模拟接口的SCL时钟信号连续拉低9次。
第四方面,本发明实施例提供了一种数据访问装置,应用于CPU,所述CPU位于第一方面所述的交换机中,所述装置包括:
写入模块,用于通过SPI向CPLD芯片发送访问指令,所述访问指令包括待访问I2C器件的物理地址和寄存器地址,以使得所述CPLD芯片基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,得到读写结果;
获取模块,用于通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果。
可选的,所述访问指令为写入指令,所述写入指令携带待写入数据;所述获取模块,具体用于:
通过所述SPI从所述CPLD芯片中获取对所述待写入数据的写入结果,所述写入结果用于表示写入成功或写入失败。
可选的,所述访问指令为读取指令;所述获取模块,具体用于:
通过所述SPI从所述CPLD芯片中获取待读取数据,所述待读取数据为所述CPLD芯片通过I2C模拟接口从所述待访问I2C器件中,所述寄存器地址对应的寄存器中读取的数据。
第五方面,本发明实施例提供了一种数据访问装置,应用于CPLD芯片,所述CPLD芯片位于第一方面所述的交换机中,所述装置包括:
接收模块,用于通过SPI接收CPU发送的访问指令,所述访问指令包括待访问I2C器件的物理地址和寄存器地址;
访问模块,用于基于所述访问指令通过I2C模拟接口,对所述待访问I2C器件进行读写操作,并存储读写结果,以便所述CPU通过所述SPI获取所述CPLD芯片对所述待访问I2C器件的读写结果。
可选的,所述访问指令为写入指令,所述写入指令携带待写入数据;
所述访问模块,具体用于:
通过所述CPLD芯片的I2C模拟接口,向所述CPLD芯片连接的各I2C器件发送地址信号,所述地址信号包括所述待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向所述CPLD发送的确认消息,所述确认消息为所述待访问I2C器件接收到所述地址信号后,在确认所述地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与所述待访问I2C器件之间的I2C模拟接口,将所述待写入数据写入所述待访问I2C器件中所述寄存器地址对应的寄存器;
通过与所述待访问I2C器件之间的I2C模拟接口,接收所述待访问I2C器件发送的写入响应,并基于所述写入响应存储对所述待写入数据的写入结果,所述写入结果用于表示写入成功或写入失败。
可选的,所述访问指令为读取指令;
所述访问模块,具体用于:
通过所述CPLD芯片的I2C模拟接口,向所述CPLD芯片连接的各I2C器件发送地址信号,所述地址信号包括所述待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向所述CPLD发送的确认消息,所述确认消息为所述待访问I2C器件接收到所述地址信号后,在确认所述地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与所述待访问I2C器件之间的I2C模拟接口,从所述待访问I2C器件中,所述寄存器地址对应的寄存器中读取待读取数据;
存储所述待读取数据,以便所述CPU通过所述SPI从所述CPLD芯片中获取所述待读取数据。
可选的,所述装置还包括:拉低模块;
所述拉低模块,用于若通过SPI总线接收到所述CPU对指定I2C模拟接口的恢复命令,则将所述指定I2C模拟接口的SCL时钟信号连续拉低9次。
本发明实施例提供的交换机及数据访问方法,CPU与CPLD芯片通过SPI连接,CPLD芯片能够通过I2C模拟接口连接I2C器件。CPU在需要访问I2C器件时,通过SPI向CPLD芯片发送访问指令,由CPLD芯片基于访问指令对I2C器件进行读写操作。由于访问I2C器件的过程由CPLD执行,CPU只需要通过SPI向CPLD芯片发送访问指令,同时SPI的速率比I2C总线速率高,因此减少了访问I2C器件对CPU的占用,提高了访问效率。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为相关技术中的交换机的结构示意图;
图2为本发明实施例提供的一种交换机的结构示意图;
图3为本发明实施例提供的一种数据访问方法流程图;
图4为本发明实施例提供的另一种数据访问方法流程图;
图5为本发明实施例提供的一种数据写入方法流程图;
图6为本发明实施例提供的一种数据读取方法流程图;
图7为本发明实施例提供的一种数据访问装置的结构示意图;
图8为本发明实施例提供的另一种数据访问装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
为了提高中央处理器(central processing unit,CPU)访问集成电路总线(Inter-Integrated Circuit,I2C)器件的效率,减少访问I2C器件对CPU的占用,本发明实施例提供了一种交换机,其中,交换机可以是盒式交换机或者框式交换机等,本发明实施例对此不作具体限定。
如图2所示,本发明实施例提供的交换机包括:CPU 201、CPLD(ComplexProgrammable logic device,复杂可编程逻辑器件)芯片202和多个I2C器件。
CPU 201通过串行外设接口(Serial Peripheral Interface,SPI)与CPLD芯片202连接;CPLD芯片202包括多个I2C模拟接口,每个I2C模拟接口通过两个输入/输出(Input/Output,I/O)管脚模拟实现;CPLD芯片202包括的每个I2C模拟接口与不同的I2C器件连接。其中,CPLD芯片202包括一定的存储空间,可以将CPLD芯片202的部分存储空间用作CPLD芯片202的逻辑寄存器,逻辑寄存器能够存储CPU201发送的访问指令,还能够存储对待访问I2C器件的读写结果。
CPU 201用于通过SPI向CPLD芯片202发送访问指令;CPLD芯片202用于基于访问指令通过I2C模拟接口对I2C器件进行读写操作。
在本发明实施例中,可以根据实际需求设置CPLD芯片202的I2C模拟接口与I2C器件之间的连接关系。
例如,在I2C器件较少的情况下,CPLD芯片202的每个I2C模拟接口可以连接一个I2C器件。
在I2C器件较多的情况下,CPLD芯片202的每个I2C模拟接口可以连接多个I2C器件。一种实施方式中,可以对I2C器件进行分类,分类依据可以为I2C器件的重要程度,比如,可以将交换机内部的I2C器件分为两类,一类为重要I2C器件,另一类为非重要I2C器件,然后将交换机外接的I2C器件(比如业务口光模块)作为一类。相应地,CPLD芯片202的一个I2C模拟接口连接重要I2C器件,另一个I2C模拟接口连接非重要I2C器件,又一个I2C模拟接口通过模拟开关连接多个业务口光模块。或者,将交换机内部的I2C器件作为一类I2C器件,将交换机外接的I2C器件作为另一类I2C器件。相应地,CPLD芯片202的一个I2C模拟接口连接交换机内部的I2C器件,另一个I2C模拟接口通过模拟开关连接交换机外接的I2C器件。本申请实施例对I2C器件的分类方式不作限定,可以根据实际需求设置每个I2C模拟接口连接的I2C器件。
例如,图2中的温感芯片、RTC芯片和EEPROM为一类I2C器件,共同连接CPLD芯片202的I2C2模拟接口。图2中的业务口光模块0~N为外接模块,业务口光模块0~N为一类I2C器件,共同通过模拟开关连接CPLD芯片202的I2C3模拟接口。
CPLD芯片202包括多个I/O管脚,对于CPLD芯片202的部分I/O管脚,可以通过逻辑代码在CPLD芯片202的两个I/O管脚分别模拟I2C接口传输的SCL信号和SDA信号,从而将两个I/O管脚模拟为一个I2C接口。本发明实施例通过CPLD芯片的部分I/O管脚实现模拟I2C接口的功能,由于CPLD芯片本身具有多个I/O管脚,因此本发明实施例未增加CPLD芯片的硬件成本。
本发明实施例提供的交换机,CPU与CPLD芯片通过SPI连接,CPLD芯片能够通过I2C模拟接口连接I2C器件。CPU在需要访问I2C器件时,通过SPI向CPLD芯片发送访问指令,由CPLD芯片基于访问指令对I2C器件进行读写操作。由于访问I2C器件的过程由CPLD执行,CPU只需要通过SPI向CPLD芯片发送访问指令,同时SPI的速率比I2C总线速率高,因此减少了访问I2C器件对CPU的占用,提高了访问效率。
示例性的,在I2C接口之间传输数据的I2C总线的速率一般在100千赫兹(kiloHertz,kHz)以下,而在SPI接口之间传输数据的SPI总线的速率一般在2兆赫兹(MegaHertz,MHz)以上,因此SPI的速率远高于I2C总线的速率。
在本发明实施例中,CPLD芯片202的第一I2C模拟接口连接于多个物理地址不同的I2C器件;和/或,CPLD芯片202的第二I2C模拟接口连接于模拟开关,模拟开关连接于多个物理地址相同的I2C器件。其中,模拟开关用于选择开启或关闭与模拟开关连接的各I2C器件的访问通道。
可选的,CPLD芯片202的第一I2C模拟接口可以连接一个I2C器件。
其中,第一I2C模拟接口中的“第一”和第二I2C模拟接口中的“第二”,仅用于区分连接不同器件的I2C模拟接口,不用于限制I2C模拟接口本身的性质。
例如,如图2所示,CPLD芯片202的I2C2模拟接口与温感芯片、EEPROM和RTC芯片相连。其中,温感芯片、EEPROM、RTC芯片为一类I2C器件,且物理地址互不相同。
可选的,因业务口光模块的物理地址通常相同,可以将每个业务口光模块连接于CPLD芯片202的一个I2C模拟接口。或者,如图2所示,可以将业务口光模块0~N通过模拟开关与CPLD芯片202的I2C3模拟接口连接。通过模拟开关选择不同访问通道使得CPLD芯片202访问不同的业务口光模块。其中,模拟开关基于CPLD芯片202的控制信号选择不同的访问通道。
在本发明实施例中,CPU 201包括I2C接口,CPU 201通过I2C接口与指定I2C器件连接;或者,CPLD芯片202的其中一个I2C模拟接口与指定I2C器件相连。
可选的,指定I2C器件包括电源和风扇。
例如,如图2所示,电源和风扇连接到CPU 201的I2C1接口。
由于CPU一般带有I2C接口,因此将较为重要的I2C器件直接与CPU的I2C接口连接,可以提高CPU访问这些较为重要的I2C器件的可靠性。
可选的,除了电源、风扇、温感芯片、EEPROM、RTC芯片和业务口光模块以外,还可能存在其他I2C器件,比如电源监控模块、时钟锁相环等。
例如,如图2所示,其他I2C器件可以与CPLD芯片202的I2C4模拟接口连接。
本发明实施例可以将交换机中所有的I2C器件连接于CPLD芯片,以尽可能减少访问I2C器件对于CPU资源的占用,以防止CPU因被I2C接口占用而无法进行其他操作。
同时,由于相关技术中,所有的I2C器件直接连接CPU的I2C接口,为了对I2C器件进行分类管理,将每一类I2C器件连接一个I2C接口,使得CPU需要具备大量的I2C接口,这对于交换机中CPU的选型具有一定的限制,增加了CPU的成本。
而本发明实施例可以选择部分I2C器件直接连接CPU的I2C接口,或者设置交换机中所有的I2C器件连接CPLD芯片而不连接CPU,如此,就可以选用I2C接口较少的CPU,因此减少了对于交换机中CPU选型的限制,降低了CPU的成本。
另外,相关技术中,通过高速串行计算机扩展总线标准(Peripheral ComponentInterconnect Express,PCIE)接口或者通用串行总线(Universal Serial Bus,USB)接口模拟I2C接口,这些方案均需要在CPU和I2C器件所在的交换机单板中增加额外的芯片,增加了交换机的硬件成本。
而CPU和I2C器件所在的交换机单板中一般包含了CPLD芯片,本发明实施例利用交换机单板自带的CPLD芯片实现SPI协议转I2C协议的功能,同时交换机单板自带的CPLD芯片一般都能实现该功能,因此本发明实施例对交换机单板上的CPLD芯片的选型没有额外的限制,没有增加额外的硬件成本。
常规的交换机结构如图1所示,温感芯片、RTC芯片和EEPROM连接到CPU的I2C1接口;电源和风扇连接到CPU的I2C2接口;模拟开关一端连接业务接口模块0~N,另一端连接到CPU的I2C3接口,其他I2C器件连接到CPU的I2C4接口。其中,连接同一个I2C接口的I2C器件通过不同的物理地址区分,若连接同一个I2C接口的I2C器件的物理地址相同,则由模拟开关选通不同的通道进行区分。
CPU需要访问一个I2C器件时,CPU通过各I2C接口向CPU连接的所有I2C器件发送地址信号,其中地址信号包括需要访问的I2C器件的物理地址。每个I2C器件接收到地址信号后,如果地址信号包括的物理地址与自身物理地址相同,则向CPU反馈确认字符(Acknowledge character,ACK)信号,以告知CPU可以进行进一步操作。CPU接收到ACK信号后,从发送ACK信号的I2C器件中读取数据,或者向发送ACK信号的I2C器件写入数据。
其中,如果CPU的一个I2C接口上连接了多个物理地址相同的I2C器件,或者CPU的一个I2C接口上连接的I2C器件的负载电容超过I2C协议支持的最高电容(400pF,其中pF表示皮法),则通过CPLD芯片控制模拟开关打开相应的通道,从而使得CPU访问相应的I2C器件。
CPU除了常规的访问I2C器件以外,还需要每隔一段时间在一些I2C器件中完成一次读写操作,即轮询一些I2C器件。由于CPU通过I2C接口访问I2C器件,而I2C接口的速率低,即CPU发送地址信号、接收ACK消息以及向I2C器件读取或写入数据的速度慢,大量地占用CPU的时间和资源,导致CPU难以处理其他业务。
为了提高CPU的访问效率,减少访问I2C器件对CPU资源的占用。本发明实施例提供了一种数据访问方法,应用于CPU,该CPU位于上述图2所示的交换机中,如图3所示,该方法包括如下步骤:
S301,CPU通过SPI向CPLD芯片发送访问指令。
其中,访问指令包括待访问I2C器件的物理地址和寄存器地址,以使得CPLD芯片基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,得到读写结果。
在本发明实施例中,CPLD芯片具有一定的存储空间,可以将CPLD芯片的部分存储空间用作CPLD芯片的逻辑寄存器。CPU可通过CPLD芯片的内部逻辑代码的状态机,访问CPLD芯片的逻辑寄存器,以向CPLD芯片发送访问指令。
S302,CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果。
本发明实施例提供的数据访问方法,CPU与CPLD芯片通过SPI连接,CPLD芯片通过I2C模拟接口连接I2C器件。CPU在需要访问I2C器件时,通过SPI向CPLD芯片发送访问指令,由CPLD芯片基于访问指令对I2C器件进行读写操作。由于访问I2C器件的过程由CPLD芯片执行,CPU只需要向CPLD芯片发送访问指令,在CPLD芯片对I2C器件进行读写操作时,CPU可以处理其他业务。且因SPI的速率比I2C总线速率高,所以CPU通过SPI从CPLD芯片中获取对待访问I2C器件的读写结果,相比于现有技术中CPU通过I2C接口访问I2C器件,可以减少访问I2C器件对CPU时间的占用,提高了数据访问效率,增加了CPU用于处理其他业务的时间。
在本发明实施例中,CPU可以通过CPLD芯片向I2C器件写入数据,此时上述访问指令为写入指令,写入指令携带待写入数据。
基于此,上述S302中CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果的方式可以实现为:CPU通过SPI从CPLD芯片中获取对待写入数据的写入结果。其中,写入结果用于表示写入成功或写入失败。可选地,当写入结果为写入失败时,写入结果还可以包括写入失败的原因。
本发明实施例中,CPLD芯片向I2C器件写入待写入数据后,如果在指定时长内接收到I2C器件反馈的ACK消息,则确定写入成功;或者,如果CPLD芯片在向I2C器件写入待写入数据后的指定时长内,未收到I2C器件反馈的ACK消息,则确定写入失败。
CPLD芯片在接收到用于表示写入成功的ACK消息后,存储用于表示写入成功的写入结果。CPLD芯片在向I2C器件写入待写入数据后的指定时长内,如果没有接收到用于表示写入成功的ACK消息,则存储用于表示写入失败的写入结果。以便CPU从CPLD芯片中获取写入结果,提高数据写入的可靠性。
本发明实施例中的CPU需要向I2C器件的寄存器中写入数据时,可以向CPLD芯片发送写入指令,由CPLD芯片完成数据写入工作,在CPLD进行数据写入的过程中,CPU可以处理其他业务。因CPU与CPLD芯片之间通过SPI通信,SPI的数据传输速度远高于I2C的传输速度,相比于CPU直接通过I2C接口向I2C器件写入数据,本发明实施例可以提高CPU的数据写入速度,避免CPU因为向I2C器件写入数据而无法处理其他业务的情况。
在本发明实施例中,CPU可以通过CPLD芯片从I2C器件读取数据,此时上述访问指令为读取指令,上述S302中CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果的方式可以实现为:CPU通过SPI从CPLD芯片中获取待读取数据。其中,待读取数据为CPLD芯片通过I2C模拟接口从待访问I2C器件中,寄存器地址对应的寄存器中读取的数据。
待读取数据属于CPLD芯片对待访问I2C器件的读取结果。读取结果用于表示读取成功或读取失败,当读取结果为读取成功时,该读取结果中包括CPLD芯片读取出的待读取数据。当读取结果为读取失败时,该读取结果还包括失败原因。
本发明实施例中,如果CPLD芯片能够从I2C器件中读取到待读取数据,则确定读取成功,CPLD芯片可以存储读取结果,此时该读取结果用于表示读取成功,且该读取结果包括待读取数据。或者,如果CPLD芯片无法从I2C器件中读取到待读取数据数据,即在向I2C器件发送读取信号后,若指定时长内未接收到I2C信号反馈的ACK消息,则确定读取失败,CPLD芯片可以存储读取结果,此时该读取结果用于表示读取失败。
相应地,CPU可以通过SPI从CLPD芯片中获取读取结果。
本发明实施例中的CPU需要从I2C器件的寄存器中读取数据时,可以向CPLD芯片发送读取指令,由CPLD芯片完成数据读取工作,此时CPU可以处理其他业务。因CPU与CPLD芯片之间通过SPI通信,SPI的数据传输速度远高于I2C的传输速度,相比于CPU直接通过I2C接口读取数据,本发明实施例可以提高读取速度,避免CPU因为读取I2C器件中的数据而无法处理其他业务的情况。
在本发明另一实施例中,当访问指令存在多个时,CPU可以通过SPI向CPLD芯片发送多个访问指令,以使得CPLD芯片通过I2C模拟接口,分别对每个访问指令所针对的I2C器件进行读写操作,并存储各读写操作的读写结果。
相应地,上述S302中CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果可以实现为:
CPU通过SPI获取CPLD芯片分别对每个访问指令所针对的I2C器件的读写结果。
可见,CPU向CPLD芯片发送多个访问指令后,可以继续处理其他业务,在CPLD芯片完成对多个访问指令所针对的I2C器件的读写操作后,CPU可一次性从CPLD芯片中读取多个读写结果,相比于CPU通过各I2C接口访问各I2C器件,本发明实施例可以减少对CPU资源的占用,相当于提高了CPU的数据访问效率。
本发明实施例还提供了一种数据访问方法,该方法应用于CPLD芯片,其中CPLD芯片位于上述图2所示的交换机中。如图4所示,该方法包括如下步骤:
S401,通过SPI接收CPU发送的访问指令。其中,访问指令包括待访问I2C器件的物理地址和寄存器地址。
CPLD芯片具有一定的存储空间,可以将CPLD芯片的部分存储空间用作CPLD芯片的逻辑寄存器。CPU可通过CPLD芯片的内部逻辑代码的状态机,访问CPLD芯片的逻辑寄存器,以向CPLD芯片发送访问指令。
S402,基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,并存储读写结果,以便CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果。
CPLD芯片202包括多个I/O管脚,对于CPLD芯片202的部分I/O管脚,可以通过逻辑代码,在CPLD芯片的两个I/O管脚分别模拟I2C接口传输的SCL信号和SDA信号,从而将两个I/O管脚模拟为一个I2C接口。
本发明实施例提供的数据访问方法,CPU与CPLD芯片通过SPI连接,CPLD芯片通过I2C模拟接口连接I2C器件。CPU在需要访问I2C器件时,通过SPI向CPLD芯片发送访问指令,由CPLD芯片基于访问指令对I2C器件进行读写操作。由于访问I2C器件的过程由CPLD芯片执行,CPU只需要通过SPI向CPLD芯片发送访问指令,在CPLD芯片对I2C器件进行读写操作时,CPU可以处理其他业务。且因SPI的速率比I2C总线速率高,所以CPU通过SPI从CPLD芯片中获取读写结果,相比于现有技术中CPU通过I2C接口访问I2C器件,可以减少访问I2C器件对CPU时间的占用,提高了数据访问效率,增加了CPU用于处理其他业务的时间。
本发明实施例中,CPU需要向I2C器件写入数据时,上述访问指令为写入指令,上述访问指令携带待写入数据。参见图5,上述S402中CPLD芯片基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,并存储读写结果可以通过以下步骤实现:
S501,通过CPLD芯片的I2C模拟接口,向CPLD芯片连接的各I2C器件发送地址信号。其中,地址信号包括待访问I2C器件的物理地址。
S502,接收待访问I2C器件通过I2C模拟接口向CPLD发送的确认消息。
其中,确认消息为待访问I2C器件接收到地址信号后,在确认地址信号中的物理地址与自身的物理地址相同的情况下发送的。确认消息可以为ACK消息。
S503,通过与待访问I2C器件之间的I2C模拟接口,将待写入数据写入待访问I2C器件中寄存器地址对应的寄存器。
S504,通过与待访问I2C器件之间的I2C模拟接口,接收待访问I2C器件发送的写入响应,并基于写入响应存储对待写入数据的写入结果。
其中,写入结果用于表示写入成功或写入失败。
在本发明实施例中,CPLD芯片向I2C器件写入待写入数据后,如果在指定时长内接收到I2C器件反馈的ACK消息,则确定写入成功;或者,如果CPLD芯片在向I2C器件写入待写入数据后的指定时长内,未收到I2C器件反馈的ACK消息,则确定写入失败。CPLD芯片在接收到用于表示写入成功的ACK消息后,存储用于表示写入成功的写入结果。CPLD芯片在向I2C器件写入待写入数据后的指定时长内,如果没有接收到用于表示写入成功的ACK消息,则存储用于表示写入失败的写入结果。
本发明实施例中的CPU需要向I2C器件的寄存器中写入数据时,可以向CPLD芯片发送写入指令,由CPLD芯片完成数据写入工作,在CPLD进行数据写入的过程中,CPU可以处理其他业务。因CPU与CPLD芯片之间通过SPI通信,SPI的数据传输速度远高于I2C的传输速度,相比于CPU直接通过I2C接口向I2C器件写入数据,本发明实施例可以提高CPU的数据写入速度,避免CPU因为向I2C器件写入数据而无法处理其他业务的情况。
在本发明实施例中,CPU需要从I2C器件读取数据时,上述访问指令为读取指令。参见图6,上述S402中CPLD芯片基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,并存储读写结果可以通过以下步骤实现:
S601,通过CPLD芯片的I2C模拟接口,向CPLD芯片连接的各I2C器件发送地址信号。其中,地址信号包括待访问I2C器件的物理地址。
S602,接收待访问I2C器件通过I2C模拟接口向CPLD发送的确认消息。
其中,确认消息为所述待访问I2C器件接收到所述地址信号后,在确认地址信号中的物理地址与自身的物理地址相同的情况下发送的。确认消息可以是ACK信号。
S603,通过与待访问I2C器件之间的I2C模拟接口,从待访问I2C器件中,寄存器地址对应的寄存器中读取待读取数据。
S604,存储待读取数据,以便CPU通过SPI从CPLD芯片中获取待读取数据。
本发明实施例中,CPU可以每间隔一段时间,从CPLD芯片中读取一次待读取数据,减少CPU多次读取待读取数据的情况,减少对CPU资源的占用,同时提高了I2C总线的管理效率,从而提高了交换机的运行效率。
在交换机中,如果CPU的I2C总线在进行数据访问时出现错误(例如CPU在从I2C器件中读取数据,或者向I2C器件写入数据的过程中,没有接收到I2C器件的响应),则导致I2C总线挂死,对I2C总线恢复后,CPU才能继续访问I2C器件。
恢复I2C总线的常规方法为:CPU通过GPIO管脚连续发送9个高电平信号,即CPU将GPIO管脚连续置为高电平9次。CPU所在的单板上的特殊电路监测到GPIO管脚发送的连续9个高电平信号时,将I2C总线的SCL时钟信号连续拉低9次,以恢复I2C总线。
这种恢复I2C总线的方式需要在单板上增加额外的特殊电路,既增加了恢复I2C总线的复杂度,又增加了交换机的硬件成本。
而本发明实施例中,恢复连接CPLD芯片的I2C总线的方式包括:若通过SPI总线接收到CPU对指定I2C模拟接口的恢复命令,则将指定I2C模拟接口的SCL时钟信号连续拉低9次。其中,指定I2C模拟接口为出现错误的I2C模拟接口。
CPU从CPLD芯片中获取读写结果,如果读写结果用于表示读取/写入失败,则CPU通过SPI向CPLD芯片发送恢复命令,CPLD在接收到恢复命令后,通过内部逻辑代码模拟I2C总线,将指定I2C模拟接口的SCL时钟信号连续拉低9次,以恢复I2C总线。
可见,本发明实施例直接利用CPLD芯片恢复I2C总线,由于交换机单板中自带有CPLD芯片,因此本发明实施例恢复I2C总线不需要在交换机中增加额外的硬件,减少了交换机的硬件成本。
基于相同的发明构思,对应于上述方法实施例,本发明实施例提供了,本发明实施例提供了一种数据访问装置,应用于CPU,CPU位于上述图2所示的交换机中,如图7所示,该装置包括:写入模块701和获取模块702;
写入模块701,用于通过SPI向CPLD芯片发送访问指令,访问指令包括待访问I2C器件的物理地址和寄存器地址,以使得CPLD芯片基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,得到读写结果;
获取模块702,用于通过SPI获取CPLD芯片对待访问I2C器件的读写结果。
可选的,访问指令为写入指令,写入指令携带待写入数据;获取模块702,具体用于:
通过SPI从CPLD芯片中获取对待写入数据的写入结果,写入结果用于表示写入成功或写入失败。
可选的,访问指令为读取指令;获取模块702,具体用于:
通过SPI从CPLD芯片中获取待读取数据,待读取数据为CPLD芯片通过I2C模拟接口从待访问I2C器件中,寄存器地址对应的寄存器中读取的数据。
基于相同的发明构思,对应于上述方法实施例,本发明实施例提供了一种数据访问装置,应用于CPLD芯片,CPLD芯片位于上述实施例的交换机中。如图8所示,该装置包括:接收模块801和访问模块802;
接收模块801,用于通过SPI接收CPU发送的访问指令,访问指令包括待访问I2C器件的物理地址和寄存器地址;
访问模块802,用于基于访问指令通过I2C模拟接口,对待访问I2C器件进行读写操作,并存储读写结果,以便CPU通过SPI获取CPLD芯片对待访问I2C器件的读写结果。
可选的,访问指令为写入指令,写入指令携带待写入数据;访问模块802,具体用于:
通过CPLD芯片的I2C模拟接口,向CPLD芯片连接的各I2C器件发送地址信号,地址信号包括待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向CPLD发送的确认消息,确认消息为待访问I2C器件接收到地址信号后,在确认地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与待访问I2C器件之间的I2C模拟接口,将待写入数据写入待访问I2C器件中寄存器地址对应的寄存器;
通过与待访问I2C器件之间的I2C模拟接口,接收待访问I2C器件发送的写入响应,并基于写入响应存储对待写入数据的写入结果,写入结果用于表示写入成功或写入失败。
可选的,访问指令为读取指令;
访问模块802,具体用于:
通过CPLD芯片的I2C模拟接口,向CPLD芯片连接的各I2C器件发送地址信号,地址信号包括待访问I2C器件的物理地址;
接收待访问I2C器件通过I2C模拟接口向CPLD发送的确认消息,确认消息为待访问I2C器件接收到地址信号后,在确认地址信号中的物理地址与自身的物理地址相同的情况下发送的;
通过与待访问I2C器件之间的I2C模拟接口,从待访问I2C器件中,寄存器地址对应的寄存器中读取待读取数据;
存储待读取数据,以便CPU通过SPI从CPLD芯片中获取待读取数据。
可选的,装置还包括:拉低模块;
拉低模块,用于若通过SPI总线接收到CPU对指定I2C模拟接口的恢复命令,则将指定I2C模拟接口的SCL时钟信号连续拉低9次。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
- 上一篇:一种医用注射器针头装配设备
- 下一篇:一种支持PCIE时钟自动开闭的系统及方法