一种用PCA9548A扩展芯片进行IIC扩展的方法与流程

文档序号:17288124发布日期:2019-04-03 03:44阅读:3981来源:国知局
一种用PCA9548A扩展芯片进行IIC扩展的方法与流程
本发明涉及一种光信号汇聚类设备,特别涉及一种用pca9548a扩展芯片进行iic扩展的方法,用于实现多路光模块的控制,一个zynq的iic文件结点能够连接8路pca9548a芯片,每路pca9548a芯片可以扩展出8路iic接口,每路iic接口连接一个光模块,这样就能够通过一个iic文件结点控制64个光模块,大大提高了iic文件结点的利用率。
背景技术
:利用zynq7000现有的iic去控制光模块,往往达不到项目规定的数目,毕竟现有的光汇聚系列设备已经达到tb/s级,所以如何能够用现有的zynq所提供的iic接口去控制更多的光模块,是众多硬件工程师探讨和研究的课题。在现有的技术手段中,zynq的i/o和中断资源是有限的,如果利用现有技术去扩展iic文件结点,为了实现多个光模块的控制,需要zynq扩展多个iic文件结点,每个文件结点连接一个pca9548a芯片,如果为了控制8个pca9548a,那么就需要zynq扩展出8个iic文件结点,势必会占用zynq大量的i/o资源和中断资源,提高了成本。技术实现要素:为了克服zynq7000提供的iic接口数目有限的问题,如何利用现有的几个iic接口去控制多个iic,本发明提供了一种用pca9548a扩展芯片进行iic扩展的方法,可以用较低的成本实现多个iic接口的控制。本发明采用的技术方案是:一种用pca9548a扩展芯片进行iic扩展的方法,其特征在于:所述pca9548a扩展芯片包括pca9548a芯片u31和pca9548a芯片u32,电路连接为:电阻r160与pca9548a芯片u31的24脚和22脚并联,电阻r158与pca9548a芯片u31的24脚和3脚并联,电阻r156与pca9548a芯片u31的24脚和1脚并联,pca9548a芯片u31的24脚接ucc_3u3,pca9548a芯片u31的1脚2脚、21脚和12脚接地,电阻r157与pca9548a芯片u32的24脚和3脚并联,电阻r179与pca9548a芯片u32的24脚和1脚并联,pca9548a芯片u32的24脚接ucc_3u3,pca9548a芯片u32的1脚2脚、21脚和12脚接地,pca9548a芯片u31的22脚和pca9548a芯片u32的22脚相接并通过时钟线sfp_9548a_scl与zynq的pl的iic时钟线连接;pca9548a芯片u31的23脚和pca9548a芯片u32的23脚相接并通过数据线sfp_9548a_sda与zynq的pl的iic数据线连接;pca9548a芯片u31的5脚和4脚为一路iic接口、7脚和6脚为一路iic接口、9脚和8脚为一路iic接口、11脚和10脚为一路iic接口、14脚和13脚为一路iic接口、16脚和15脚为一路iic接口、18脚和17脚为一路iic接口、20脚和19脚为一路iic接口,共扩展为8路iic接口,每路iic接口通过时钟线scl_sfp<15..0>连接一个光模块的时钟线;pca9548a芯片u32的5脚和4脚为一路iic接口、7脚和6脚为一路iic接口、9脚和8脚为一路iic接口、11脚和10脚为一路iic接口、14脚和13脚为一路iic接口、16脚和15脚为一路iic接口、18脚和17脚为一路iic接口、20脚和19脚为一路iic接口,共扩展为8路iic接口,每路iic接口通过时钟线sda_sfp<15..0>连接一个光模块的时钟线;pca9548a芯片u31和pca9548a芯片u32共扩展为16路iic接口,共连接16个光模块;利用pca9548a扩展芯片实现iic扩展的方法步骤如下:利用一个结点扩展多个pca9548a扩展芯片,利用不同的从地址去访问pca9548a扩展芯片;一个文件结点去挂载多个pca9548a扩展芯片,首先要先理解pca9548a扩展芯片的从地址,pca9548a扩展芯片也是一个iic器件,其从地址命名规则见表1:表1为从地址命名规则1110a2a1a0其中前4位1.1.1.0是固定值,a2,a1,a0是器件的从地址,与硬件的连接相关,即a2,a1,a0在硬件上可以分别置为高低电平,置低电平对应是0,置高电平对应的是1,例如,pca9548a芯片u31的a2,a1,a0全部与地线相连,即全部置低电平,则pca9548a芯片u31芯片最终的从地址是1110000,对应16进制是0x70,pca9548a芯片u32的a2,a1与地线相连,a0与高电平相连,则pca9548a芯片u32芯片最终的从地址是1110001,对应的16进制是0x71,从3位可选的从地址可知,一个iic文件结点最多可以挂载8个pca9548a扩展芯片,在打开文件结点函数后,需要绑定器件从地址,函数原型如下:fd=open("/dev/i2c-0",o_rdwr);ioctl(fd,i2c_slave_force,address);open函数是linux硬件设备操作函数,其原型是intopen(constchar*pathname,intflags);在上述例中,constchar*pathname对应的是"/dev/i2c-0",表示i2c文件结点所在的路径,flags对应o_rdwr,表示以可读可写的方式打开文件,函数执行成功就会返回文件描述符即fd;ioctl是设备驱动程序中对设备i/o通道进行管理的函数,它的参数个数如下:intioctl(intfd,intcmd,…);其中fd是用户程序打开设备时使用open函数返回的文件标识符,cmd就是用户程序对设备的控制命令,在上述函数中,cmd对应的是i2c_slave_force,该命令是将设备从地址传递给总线,其中address是iic器件前7位地址,绑定不同的从器件地址,就能够访问不同的pca9548a扩展芯片,访问到不同的扩展芯片后,就能够利用pca9548a扩展芯片选路机制,选通连接光模块,然后就能够控制光模块,在上述例中,pca9548a芯片u31的从地址为0x70,即address为0x70,pca9548a芯片u32的从地址为0x71,即address为0x71。本发明的有益效果是:本申请通过一个iic文件结点扩展了两片pca9548a芯片,每片pca9548a能够连接8路iic,两片pca9548a能够扩展出16路iic,本申请还可以请通过一个iic文件结点扩展八片pca9548a芯片,每片pca958能够连接8路iic,8片pca9548就能扩展出64路iic,那么就能够通过一个iic文件扩展了64路iic接口,控制了64个光模块,即,将八片pca9548a芯片的22脚脚相接并通过时钟线sfp_9548a_scl与zynq的pl的iic时钟线连接;将八片pca9548a芯片的23脚相接并通过数据线sfp_9548a_sda与zynq的pl的iic数据线连接;每片pca9548a芯片的5脚和4脚为一路iic接口、7脚和6脚为一路iic接口、9脚和8脚为一路iic接口、11脚和10脚为一路iic接口、14脚和13脚为一路iic接口、16脚和15脚为一路iic接口、18脚和17脚为一路iic接口、20脚和19脚为一路iic接口,共扩展为8路iic接口,每路iic接口通过时钟线scl_sfp<63..0>和数据线sda_sfp<63..0>连接一个光模块的时钟线和数据线;每片pca9548a芯片的1脚,2脚,21脚分别置高低电平,即有1脚,2脚,21脚,可以对应8组电平关系,即低低低,低低高,低高低,低高高,高低低,高低高,高高低,高高高,这样每片pca9548a的从地址不通,就能够通过一个zynq的iic文件结点去控制了;八片pca9548a芯片可扩展为64路iic接口,共连接64个光模块。本发明用较低的成本实现多个iic接口的控制,大大提高了iic文件结点的利用率,节省了zynq的i/o资源和中断资源。附图说明图1为本发明的电路图;图2为本发明控制寄存器通道选择位示意图。具体实施方式如图1所示,一种用pca9548a扩展芯片进行iic扩展的方法,利用pca9548a扩展芯片实现iic的扩展可以采取两种方案,一种是利用一个结点扩展多个pca9548a芯片,利用不同的从地址去访问扩展芯片,另一种是利用不同结点直接连接pca9548a芯片,从省zynq资源的角度来看,第一种方法是较好的,下面将介绍如何通过一个iic结点去扩展多个iic结点。pca9548a扩展芯片包括pca9548a芯片u31和pca9548a芯片u32,电路连接为:电阻r160与pca9548a芯片u31的24脚和22脚并联,电阻r158与pca9548a芯片u31的24脚和3脚并联,电阻r156与pca9548a芯片u31的24脚和1脚并联,pca9548a芯片u31的24脚接ucc_3u3,pca9548a芯片u31的1脚2脚、21脚和12脚接地,电阻r157与pca9548a芯片u32的24脚和3脚并联,电阻r179与pca9548a芯片u32的24脚和1脚并联,pca9548a芯片u32的24脚接ucc_3u3,pca9548a芯片u32的1脚2脚、21脚和12脚接地,pca9548a芯片u31的22脚和pca9548a芯片u32的22脚相接并通过时钟线sfp_9548a_scl与zynq的pl的iic时钟线连接,pca9548a芯片u31的23脚和pca9548a芯片u32的23脚相接并通过数据线sfp_9548a_sda与zynq的pl的iic数据线连接;pca9548a芯片u31的5脚和4脚为一路iic接口、7脚和6脚为一路iic接口、9脚和8脚为一路iic接口、11脚和10脚为一路iic接口、14脚和13脚为一路iic接口、16脚和15脚为一路iic接口、18脚和17脚为一路iic接口、20脚和19脚为一路iic接口,共扩展为8路iic接口,每路iic接口通过时钟线scl_sfp<15..0>连接一个光模块的时钟线;pca9548a芯片u32的5脚和4脚为一路iic接口、7脚和6脚为一路iic接口、9脚和8脚为一路iic接口、11脚和10脚为一路iic接口、14脚和13脚为一路iic接口、16脚和15脚为一路iic接口、18脚和17脚为一路iic接口、20脚和19脚为一路iic接口,共扩展为8路iic接口,每路iic接口通过时钟线sda_sfp<15..0>连接一个光模块的时钟线;pca9548a芯片u31和pca9548a芯片u32共扩展为16路iic接口,共连接16个光模块。一种用pca9548a扩展芯片进行iic扩展的电路,利用pca9548a扩展芯片实现iic的扩展可以采取两种方案,一种是利用一个结点扩展多个pca9548a芯片,利用不同的从地址去访问扩展芯片,另一种是利用不同结点直接连接pca9548a芯片,从省zynq资源的角度来看,第一种方法是较好的,下面将介绍如何通过一个iic结点去扩展多个iic结点。一个文件结点去挂载多个扩展芯片,首先要先理解pca9548a扩展芯片的从地址,pca9548a扩展芯片也是一个iic器件,其从地址命名规则见表1:表1为从地址命名规则1110a2a1a0其中前4位1.1.1.0是固定值,a2,a1,a0是器件的从地址,与硬件的连接相关,即a2,a1,a0在硬件上可以分别置为高低电平,置低电平对应是0,置高电平对应的是1,例如,pca9548a芯片u31的a2,a1,a0全部与地线相连,即全部置低电平,则pca9548a芯片u31芯片最终的从地址是1110000,对应16进制是0x70,pca9548a芯片u32的a2,a1与地线相连,a0与高电平相连,则pca9548a芯片u32芯片最终的从地址是1110001,对应的16进制是0x71,从3位可选的从地址可知,一个iic文件结点最多可以挂载8个pca9548a扩展芯片,在打开文件结点函数后,需要绑定器件从地址,函数原型如下:fd=open("/dev/i2c-0",o_rdwr);ioctl(fd,i2c_slave_force,address);open函数是linux硬件设备操作函数,其原型是intopen(constchar*pathname,intflags);在上述例中,constchar*pathname对应的是"/dev/i2c-0",表示i2c文件结点所在的路径,flags对应o_rdwr,表示以可读可写的方式打开文件,函数执行成功就会返回文件描述符即fd;ioctl是设备驱动程序中对设备i/o通道进行管理的函数,它的参数个数如下:intioctl(intfd,intcmd,…);其中fd是用户程序打开设备时使用open函数返回的文件标识符,cmd就是用户程序对设备的控制命令,在上述函数中,cmd对应的是i2c_slave_force,该命令是将设备从地址传递给总线,其中address是iic器件前7位地址,绑定不同的从器件地址,就能够访问不同的pca9548a扩展芯片,访问到不同的扩展芯片后,就能够利用pca9548a扩展芯片选路机制,选通连接光模块,然后就能够控制光模块,在上述例中,pca9548a芯片u31的从地址为0x70,即address为0x70,pca9548a芯片u32的从地址为0x71,即address为0x71。实施例如下:打开对应于zynq的iic结点,实施例中对应的iic结点为i2c-0:fd=open("/dev/i2c-0",o_rdwr);open函数是linux硬件设备操作函数,其原型是intopen(constchar*pathname,intflags);在上述例中,constchar*pathname对应的是"/dev/i2c-0",表示i2c文件结点所在的路径,flags对应o_rdwr,表示以可读可写的方式打开文件,函数执行成功就会返回文件描述符即fd。该结点文件对应于pca9548a扩展芯片u31和pca9548a扩展芯片u32两个扩展芯片,为了区分这两个扩展芯片,从地址要不同,pca9548a芯片u31的a2,a1,a0全部与地线相连,即全部置低电平,则u31芯片最终的从地址是1110000,对应16进制是0x70,pca9548a芯片u32的a2,a1与地线相连,a0与高电平相连,则u32芯片最终的从地址是1110001,对应的16进制是0x71,然后是绑定从地址,函数原型如下:ioctl(fd,i2c_slave_force,0x70);ioctl是设备驱动程序中对设备i/o通道进行管理的函数,它的参数个数如下:intioctl(intfd,intcmd,…);其中fd是用户程序打开设备时使用open函数返回的文件标识符,cmd就是用户程序对设备的控制命令,在上述函数中,cmd对应的是i2c_slave_force,该命令是将设备从地址传递给总线,在实施例中,pca9548a芯片u31的从地址为0x70,所以通过这个函数就可以将u31芯片绑定到iic总线上,绑定完9548a扩展芯片u31的从地址,就可以对pca9548a扩展芯片u31进行控制了,pca9548a扩展芯片u31的控制寄存器通道选择位见图2,图2通道选择位(read/write),其中,b7~b0分别对应channel7~channel0,想接通哪个通道,就将该通道对应的位置置1,然后通过iic的写命令将值写到寄存器上,就可以完成对通道的选通,选通通道后,就可以控制对应通道的光模块,选通函数示例,选通通道为channel0:write(fd,&0x01,1);write函数功能是写到文件中,其函数原型是intwrite(inthandle,void*buf,intnbyte);handle是文件描述符,对应的是fd,即上文open返回的文件描述符,buf是指定的缓存区,即指针,指向一段内存单元,对应&0x01,nbyte是要写入文档的字节数,实施例中,将0x01写到文件中,就可以实现选通通道channel0。选择通道后,就可以控制光模块,当想要切换其他通道的时候,必须先把先前选通的通道关闭,关闭原理就是将原先对应位的寄存器值置0,例如,关闭channel0;write(fd,&0x00,1);该函数就是将0x00这个数值写到文件中,可以实现关闭通道channel0;关闭完channel0就可以选通其他通路,每个通路对应的值见表2:见表2为通路对应的值channel0channel1channel2channel3channel4channel5channel6channel70x010x020x040x080x100x200x400x80写完数据,就可以关闭文件结点,调用的函数原型是:close(fd)。close函数是关闭文件结点函数,函数原型是intclose(intfd),fd是文件描述符,即上文open函数返回的文件描述符。pca9548a芯片u31操作结束,pca9548a芯片u32操作与u31相同,唯一的区别是,绑定从器件地址是0x71,即ioctl(fd,i2c_slave_force,0x71),剩下的操作与上述相同。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1