陕西烽火电子股份有限公司 陕西宝鸡 721006
摘要:无线通信设备设计中,需要对功率平坦度进行调试,所以需要将每个频点的数控衰减值存储于EEPROM,以便设备在正常工作中,使用该衰减值,达到功率输出一致的要求。同时由于无线通信设备的硬件差异性和环境影响,使得无线通信设备的正反向功率等参数不一致,所以需要EEPROM存储每个设备的基准值,已达到无线通信设备的一致性。本文主要选用国产芯片使用VHDL语言实现EEPROM的读写,来实现数控衰减值和基准值的存储和读出,广东高云半导体FPGA芯片GW2A-LV55PBGA484C8/I7作为主机,成都华微电子EEPROm芯片HWD24C512作为为从机。
关键词:FPGA;I2C;EEPROM
1 引言
I2C总线(I2C bus,Inter-IC bus)是一个双向的两线连续总线,提供集成电路之间的通信线路,它是一种串行扩展技术,即就是完成集成电路或功能单元之间的信息交换的规范或者协议[1]。I2C总线采用一条数据(SDA:串行数据线Serial data line),加一条时钟线(SCL:串行时钟线Serial clock line)来完成数据的传输及外围器件的扩展。I2C在芯片的配置中应用很广泛,比如摄像头、VGA转HDMI转换芯片[2]。
无线通信设备设计中,需要对功率平坦度进行调试。即就是对其所有工作频点进行功率校准,使设备处于发射状态时,所有工作频点下输出功率基本一致并且在特定的范围内,否则会出现状态不一致甚至烧坏其他部件的情况。本文通过改变每个频点下的数控衰减值,以达到功率一致,并将每个频点的数控衰减值存储于EEPROM,以便设备在正常工作中,使用该衰减值,达到功率输出一致的要求。无线通信设备设计中,由于硬件差异性和环境影响,使得无线通信设备的一致性不同,为了使得控制一致,所以需要EEPROM存储每个设备的基准值,已达到无线通信设备的一致性。
本文以实际项目中用于存储参数的EEPROM的读写设计为实例。广东高云半导体FPGA芯片GW2A-LV55PBGA484C8/I7作为主机,成都华微电子EEPROm芯片HWD24C512作为为从机。HWD24C512是串行电擦除可编程寄存器(EEPROM),容量为64K。引脚VCC和GND为电源和地;SCL为时钟引脚,本设计输入频率为50HHZ,SCL上升沿输入EEPROM,SCL下降沿输出EEPROM;SDA为双向数据接口;A2,A1,A0为器件片选地址苏如意叫,只操作一片全接地;WP接地正常读写,WP接Vcc写操作被禁止,本设计中WP接上拉电阻,在写操作时置0,其他操作时置1,以避免误操作篡改EEPROM数据,即写保护。FPGA芯片GW2A-LV55PBGA484C8/I7上电后,IO输出默认为高电平,所以要注意高有效的控制,高有效的IO口要加1K电阻拉低,以防止一上电触发有效控制。
2 I2C读写操作的FPGA设计
I2C读写操作使用VHDL语言进行模块化设计,设计图如图1所示,程序状态流程图如图2所示。
图1 I2C的FPGA设计
图2 程序状态转移图
I2C写操作(字节写操作):
1)产生start信号:在SCL为高时,SDA的下降沿称为启动信号。则需要在写之前以主时钟上升沿为触发,先置SDA为1,再置SCL为1,最后置SDA为0,完成启动信号的产生。
2)传送器件地址ID_Address: EEPROM器件地址为8位,前四位固定为1010,最后一位为数据传输方向位R/W,低电平表示主机(FPGA)往从机(EEPROM)写数据(W),高电平表示主机(FPGA)从从机(EEPROM)读数据(R),该位此时为低电平W。SDA在SCL上升沿输入8位EEPROM器件地址。
3)传送写入器件寄存器地址:即数据要写入的位置,2个8位的数据地址。SDA在SCL上升沿输入16位器件寄存器地址,先送高8位,再送低8位。
4)传送要写入的数据:该介绍中为字节写操作,故数据为8位数据。SDA在SCL上升沿输入8位写入数据。
5)产生stop信号:在SCL为高时,SDA的上升沿称为终止信号。则需要在送完写入的数据输出高阻后,以主时钟上升沿为触发,先置SDA为0,再置SCL为1,最后置SDA为1,完成终止信号的产生。
6)擦写过程:EEPROM接收到终止信号后,开始内部擦写过程(tWR)。在内部擦写过程中,EEPROM不再相应FPGA的任何请求。
注1:
a)由于每接收到8位数据地址或数据后,EEPROM都要返回一个应答信号,所以在FPGA每送8位数据后,需要立即释放SDA信号线,本设计通过主机输出从机SDA一个高阻态Z来释放SDA。
b)写周期(tWR)是指从一个合法写入指令中的终止条件开始到器件内部写入完成为止的时间周期。HWD24C512芯片写周期tWR至少5ms,即在写完一个字节或一个页后,需要延时至少5ms,才可进行EEPROM读写操作。
I2C读操作(随机地址读操作):
1)产生start信号:同写操作的起始信号一样,在写之前以主时钟上升沿为触发,先置SDA为1,再置SCL为1,最后置SDA为0,完成启动信号的产生。
2)传送器件地址ID_Address:同写操作一样,发送八位EEPROM器件地址,最后一位为低电平W。
3)传送读器件寄存器地址:即想读取的字节数据的地址,2个8位的数据地址,执行一个虚写操作。
4)产生start信号:在EEPROM应答后,FPGA需要重新发送启动信号。
5)传送器件地址ID_Address:发送八位EEPROM器件地址,方向位选择“读”操作高电平。
6)读取一个字节的数据:EEPROM响应并发送应答信号,然后输出所要求的一个8 位字节数据。
7)产生stop信号:完成读数据后,FPGA不发送应答信号,但需要产生一个终止信号终止读操作(终止信号产生方式同写操作终止信号)。
注2:
a)数据传输有效的条件,只有在SCL为低电平期间,才允许数据变化,在高电平期间,不允许数据变化,否则就会出现起始信号或结束信号。即就是在SCL高电平的中间采样数据,在SCL低电平的中间改变数据,在SCL为高电平时SDA应该保持稳定不能随意乱动。
b)无论是读操作还是写操作,SCL始终都是由主机控制的;写操作的应答信号由从机给出,表示从机是否正确接收了数据;读操作的应答信号则由主机给出,表示是否继续读下去。
3 I2C读写操作仿真时序
测试程序总体模块分布:(1)顶层模块:FPGA与EEPROM的IO设计;(2)EEPROM读写控制模块:主要进行总体读写的控制切换,并输出结果;(3)EEPROM读写时序模块:I2C驱动程序,具体读写时序。
测试实验,首先给器件0的00101000数据地址写入数据10100101(8位二进制),写完成后读出该地址的数据。该试验测试波形图如图3所示,通过时序图可看出该设计符合I2C的通信时序要求,读出00101000数据地址的数据为10100101(8位二进制)。故验证了该I2C读写时序的可行性。
图3 测试时序图
参考文献:
[1]杨帆. 基于I2C接口EEPROM读写控制器设计[J]. 微型机与应用, 2015, 34(10):22-24.