工具/软件:Code Composer Studio
大家好、
我测试的代码如下:
如果(t<10) { WriteEeprom (t、10+t); WriteEeprom (t+1、10+t+1); DataRad[t]= ReadEeprom (t); //DataRad[t+1]=(ReadEeprom (t+1)<<8)| DataRad[t]; DataRad[t+1]= ReadEeprom (t+1); T=t+2; } 如果(t>=10) {}
void I2CA_Init (void) { I2caRegs.I2CMDR.ALL = 0x0000; //初始化 I2C I2caRegs.I2CSAR = 0x0050; //从机地址—EEPROM 控制代码 // I2CCLK = SYSCLK/(I2CPSC+1) I2caRegs.I2CPSC.all = 8;//6 //预分频器-模块时钟需要7-12MHz I2caRegs.I2CCLKL = 10; //注:必须为非零 I2caRegs.I2CCLKH=5; //注:必须为非零 // I2caRegs.I2CIER.ALL = 0x24; //启用 SCD 和 ARDY 中断 I2caRegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位 //挂起时停止 I2C I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO I2caRegs.I2CFFRX.ALL = 0x2040;//启用 RXFIFO、清除 RXFFINT、 返回; }
UINT16 ReadEeprom (UINT16 e2promaddress) { uint16地址慢速; uint16地址; I2caRegs.I2CMDR.bit.IRS = 1; //复位 I2C while (I2cRegs.I2CSTR.bit.BB = 1); //忙循环 I2caRegs.I2CSTR.bit.SCD = 1; //清除 SCD 位(停止条件位) while (I2caRegs.I2CMDR.bit.STP==1); //停止位循环 地址 = e2promaddress>>8; 寻址 = e2promaddress; I2caRegs.I2CSAR = 0x0050; while (I2cRegs.I2CSTR.bit.BB = 1); I2caRegs.I2CMDR.ALL = 0x2620; //开始、无停止位、主器件、TX、复位 I2C I2caRegs.I2CCNT = 0x0002; I2caRegs.I2CDXR =地址高; I2caRegs.I2CDXR =地址慢速; while (!I2cRegs.I2CSTR.bit.ARDY); //准备好了吗? I2caRegs.I2CMDR.ALL = 0x2C20; //开始、CNT = 0时的停止位、主器件、Rx、复位 I2C I2caRegs.I2CCNT = 1; if (I2caRegs.I2CSTR.bit.nack = 1) { I2caRegs.I2CSTR.All = I2C_CLR_Nack_bit;// 0x0002 } I2caRegs.I2CMDR.bit.STP= 1; // CNT=0时停止位 while (!I2cRegs.I2CSTR.bit.SCD); //是否检测到停止位? // tempdata = I2caRegs.I2CDRR << 8; //读取数据 tempdata = I2caRegs.I2CDRR; totalTemp = tempdata + totalTemp; DELAY_US (100); return (tempdata); }
void WriteEeprom (uint16 e2promaddress、uint16 data) { uint16地址慢速; uint16地址; uint16 testval=3; I2caRegs.I2CMDR.bit.IRS = 1; //复位 I2C 地址 =(e2promaddress>>8)&0x00FF; 寻址 = e2promaddress&0x00FF; I2caRegs.I2CSAR = 0x0050; // EEPROM 控制位+地址(A0-A2)。 对于24LC256、0 1 0 1 0 A0 A1 A2 while (I2cRegs.I2CSTR.bit.BB = 1); I2caRegs.I2CCNT = 3; I2caRegs.I2CMDR.ALL = 0x6E20; //start、stop、no rm、reset i2c I2caRegs.I2CDXR =地址高; I2caRegs.I2CDXR =地址慢速; //I2caRegs.I2CDXR =(testval >> 8)和0x00FF;//高字节数据 I2caRegs.I2CDXR = testval; //低字节数据 wtempdata = I2caRegs.I2CDXR; I2caRegs.I2CMDR.bit.STP= 1; // CNT=0时停止位 while (!I2cRegs.I2CSTR.bit.SCD); //是否检测到停止位? DELAY_US (5000); // 5ms = 24LC256的写入周期时间-基于数据表24LC256 返回; }
首先、我将"3"值写入10个地址(t<10)。 然后更改了代码并希望读取20个地址。 他们都是“3”。 然后、我想知道在哪个 EEPROM 地址之前、该值是"3"、它是255 (t<256)。
“totalTemp”下面是3*256,这意味着24c04中的256个地址被定义为“3”。
这是正常行为吗? 我不熟悉 EEPROM 通信、无法了解原因。
谢谢你。


