| MCF52233_CFM | |
MCF52233_CFM——Coldfire Flash Module Coldfire的CFM功能是把它的flash当作EEPROM来用。使用起来还是很方便的,只要完成几个小的功能函数就行了: 第一个是CFM的初始化CFM_init(),完成时钟的设置; 第二个是页擦除CFM_Page_eraser(),完成一页的擦除工作,Coldfire的256K flash被分成128页,每2K为1页,只有在擦除后才能正确地向一个地址中写入数据; 第三个是CFM_Write(),完成向某地址写入数据的功能,Coldfire的CFM是按字操作的,以4B为一个最小单位。 CFM有5个CMD:Blank Check 、Pageerase verify、 Word program 、Page erase 、Mass erase但只要其中Word program 、Page erase 两个就能满足一般的使用了。 在使用CFM功能时对它的地址这块可能会有些迷惑,这里简单介绍下:MCF52233有256K的flash,默认情况下起始地址是0x44000000(#define CFM_IPS_FLASH_ADDR 0x44000000),我们不能在存有程序的地方擦、写数据,最简单的办法就是在flash的最后面操作,这样就不要考虑烧进去的程序结束的位置了。起始地址加上256K得到最后一个存储单元的地址即#define FLASH_END_ADDRESS CFM_IPS_FLASH_ADDR+0x40000),我们就从FLASH_END_ADDRESS 开始往前写我们的数据。 最后一点就是怎样读我们写的数据,其实非常简单,用read_data=(*(uint32 *))(address)就将address处的数据赋给了read_data;同样,在写数据的时候会用到(*(uint32))(address)=write_data来将数据写到address地址处。 程序如下: uint8 CFM_init(unsigned long FlashClk) | MCF_CFM_CFMCLKD_PRDIV8; //Disable all protection (if LOCK not set)*/ |MCF_CFM_CFMUSTAT_ACCERR; uint8 CFM_page_erase(unsigned char page) //Clear any errors |MCF_CFM_CFMUSTAT_ACCERR; uint8 CFM_write(unsigned int address ,unsigned int data) |MCF_CFM_CFMUSTAT_ACCERR; |