最近有小伙伴问了这样一个问题,说kea64的eeprom的基地址是0x1000_0000,但是FCCOB的命令,需要的地址是地址的0-23位。 那我们基地址的1,不就不会被放入FCCOB里吗?因为1是在第28位啊。 既然地址都没完整放进去,那怎么擦除eeprom指定地址呢? 事实上,并不需要完整的地址,mcu可以根据FCCOB的命令域是flash命令还是eeprom命令来自动明白从哪个基地址开始操作。也就是说,当命令域是eeprom的擦写等操作时候,mcu就自动明白会从0x1000_0000开始进行操作。为了验证这一点,我们来做一个实验。 我使用了FRDM-KE02的eeprom例程来实验,它的基地址也是0x1000_0000。 源代码中要擦写eeprom的目标地址是 destAdrss = EEpromBlockBase + (EEpromTotalSize -(SECTOR_INDEX_FROM_END * EEpromSectorSize)) 我们现在将eeprom的基地址EEpromBlockBase设置为0。如果没有基地址,还能操作eeprom,那就说明我们是对的。destAdrss现在值为0xf0 然后运行一下 程序挂了,难道思路不对吗? 仔细debug程序,会发现,我们需要注释这段代码,它做了地址范围检查,检测在不在eeprom地址范围里,我们现在测试的地址当然不在,所以我们暂时注释掉。 这个擦除eeprom需要暂时注释,同样的写入eeprom的函数里有相同的关于地址范围检测的代码,我们暂时也注释掉。
同时我们还要修改读取地址内容的代码,虽然我们是将destAdrss的基地址设置为0了,但是读取时候还是要从eeprom位置开始读。
改完以后运行一下,发现通过了 我们提供的地址里去除了eeprom的基地址是0xf0,但是它仍然能修改和读取eeprom的数据,所以其实基地址并不需要去指定,mcu自己明白eeprom基地址在哪里
|