你好!
我在项目中使用了C5517处理器,这个DSP芯片内部没有可擦写的存储空间,使用外接EEPROM器件,来保存程序参数。
在我的程序中,参照EVM5517评估板的例子,使用i2crom_write()向eeprom写入整块数据都是正常,甚至能用程序通过写eeprom的方式,把另一段程序当作数据烧写进入eeprom,并能让烧写进去的程序在芯片上电后自动运行起来。
但是,如果我用i2crom_write()往EEPROM中写入带类型的变量,再用i2crom_read()方法读出来,则会出错。
比如下面这段代码:
Uint16 testVal = 375;
i2crom_write((Uint32) &testVal, 65408, 2); //65408为数据在eeprom中的写入位置,Uint16占2个字节,因此写入2个字节
testVal = 0;
i2crom_read(65408, (Uint32) &testVal, 2);
printf("testVal=%d\n", testVal);
我使用容量64K的eeprom,页大小为128,地址65408为最后一页,不会跨页。
此段代码的运行结果如下:
将一个Uint16类型的变量testVal初始化为375;然后写入EEPROM,写入长度2个字节;
写入操作发生了作用,因为我把整个页读出来,头两个字节确实变了,为(0x77、0xF6);
但是十进制的375应该是(0x177),按照理解写入的头两个字节应该是(0x77、0x01)或者(0x01、0x77)才对;
同时,从EPROM相同位置读2个字节,打印结果却为:testVal=119
即0x77被读出,0xF6没有读出来。
这是什么原因?
EEPROM除了按字节(Uint8)顺序读写外,难道不能以其他数据类型按void* 的方式读写?
哪里有用不同数据类型读写EEPROM的例子?
谢谢!