硬件环境:cpu:LPC2468(ARM7TDMI),Flash: S29GL128(16Mbytes,16bit-databus/8bit-databus)
硬件电路:选择flash芯片为16bit-databus操作(即每个Flash地址存储两个字节);cpu地址线A0不接,A1接Flash地址线A0,以此类推;有的硬件电路人员认为SDRAM和Flash的写信号WE最好由不同的CPU管教控制更加稳定,基于这样的设计此处cpu的BLS0作为Flash芯片的写信号WE使用,cpu的EMC信好WE给SDRAM使用。
EMC配置:
(1)选择databus宽度;
(2)设置正确的BLS信号电平;
(3)设置正确的读写延时;
(4)将不相关的bit位禁止;
读写方法:
严格按照datasheet的命令格式进行读写,注意某些操作之后要求延时。
要点1:
命令地址一般在16bit之内,但是每次发出命令时要加上Flash基地址,因为Flash基地址的最高位用于产生片选信号CS;
由于本设计中CPU地址线A0不接FLASH地址线,所以命令地址需要左移一位再加上Flash基地址之后输出到CPU地址线上;
由于是16bitdatabus,每次操作一个Flash地址空间要读写两个字节,所以Flash数据读写操作时代码给出的地址不需要进行移位;
要点2:
按照要点1编译出的代码还有可能不能正确执行,原因还是16bit-databus,每次操作数据线一起给出16bit的数据,不允许将16bit数据拆分成2个8bit数据进行读写,所以需要检查编译后的代码是否将strh指令拆分成2个strb指令造成一次操作两次片选输出的现象,可以通过在编译时加入-march选项解决。
u-boot中与flash相关的命令有flinfo,erase,cp。u-boot函数接口为flash_init,flash_print_info,flash_erase,write_buff。
阅读(4639) | 评论(0) | 转发(0) |