|||
MC9S08LL8是双FLASH模式,2K的FLASH A和8K FLASH B,总共有10K FLASH可用。对于一般的产品开发足够用了。数据手册里面都有对FLASH操作的详细说明,这里面需要注意的是:由于FLASH编程是高压操作,所以这时从FLASH中取指令会不安全,而对FLASH操作的指令代码确又存储在FLASH中,因此需要在对FLASH编程或者擦除之前,将操作FLASH的这部分指令代码拷贝到RAM中运行,等执行完这部分指令后又回到FLASH中取指令。这个过程也就实现了FLASH模拟EEPROM,如图1.6所示。
图1.6 flash模拟EEPROM过程
一开始我从网上下载了一篇作者是师英写的《在HCS08上使用Flash模拟EEPROM.pdf》,参考里面写的代码没有成功,主要是里面对FLASH操作的关键代码是用指令代码写的,看得比较晕,也不知道那边错了。不过我发现他里面的对EERPOM交替写的思路挺好。但是那个遍历的不是很适用,因为它的存储需要遍历,而我认为存储到EERPOM是不需要遍历的,读取的时候需要遍历,遍历完的地址保存起来,给需要存储时用。
后来在飞思卡尔代理商威健的应用工程师帮助下,最终我实现了FLASH模拟EEPROM。在此表示感谢!!当然是换了一种方法。采取的措施是:
先编译这段需要拷贝到RAM运行的代码,看他所占用FLASH的大小Cx,然后分配一个RAM空间大于等于Cx给这段代码用,最后作为一个库给LL8调用。这里面需要注意几个问题:
① RAM的分配
② ROM的分配
③ FLASH操作的频率控制在150kHz~200kHz内。
没有模拟成功的最大问题是RAM和ROM的分配不正确。个人建议,先理解模拟EEPROM的整个过程,才能很快找出自己程序的问题所在。