作 者:电子产品世界
程序说明:赋予P4_5为O,使得CE信号成低电平,从而片选K9F1208有效;赋予P4_4为1,使得CLE信号成高电平,从而使K9F1208的命令允许信号有效;赋予P4_3为O,使得ALE信号成低电平,从而使K9F1208的地址允许信号无效;最后对rK9F1208DATA进行空写命令字,使得WE信号成低电平,K9F1208的命令寄存器从数据总线接收到命令字,并执行相应的操作。
程序说明:赋予P4_5为0,使得CE信号成低电平,从而片选K9F1208有效;赋予P4_4为O,使得CLE信号成低电平,从而使K9F1208的命令允许信号无效;赋予P4_3为1,使得ALE信号成高电平,从而K9F1208的地址允许信号有效;最后对rK9F1208DATA进行空写地址字,使得WE的信号成低电平,K9F1208从数据总线接收到地址字,并锁存到地址锁存器中。
程序说明:赋予P4_5为0,使得CE信号成低电平,从而片选K9F11208有效;赋予P4_4为O,使得CLE信号成低电平,从而使K9F1208的命令允许信号无效;赋予P4_3为0,使得ALE信号成低电平,从而使。K9F1208的地址允许信号无效;最后对rK9F1208DATA进行空写数据,使得WE的信号成低电平,K9F1208从数据总线接收到数据,并根据命令寄存器和地址锁存器来处理接收到的数据。
程序说明:赋予P4_5为0,使得CE信号成低电平,从而片选K9F1208有效;赋予P4_4为O,使得CLE信号成低电平,从而K9F1208的命令允许信号无效;赋予P4_3为O,使得ALE信号成低电平,从而使。K9Fl208的地址允许信导无效;最后对rK9F1208DATA进行空读数据,使得RE的信号成低电平,K9F1208会根据命令寄存器和地址锁存器来向数据总线发送相应的数据。
程序说明:只是读取P4_6的状态,以判断K9F1208是否“忙”。如果P4_6为高电平,则表示K9F1208不忙,返回高电平;如果P4_6为低电平,则表示K9Fl208“忙”,返回高电平。
为了台理地操作K9F1208,还添加了不选中K9F1208的函数,以便在页读取和页编程操作后,使K9F1208不工作。程序只是让P4_5、P4_4、P4_3为低电平,从而使得K9F1208的片选信号、命令允许信号、地址允许信号无效。
宏定义语句如下:
#defineflash_inactive(){P4_5=0;P4_4=0;P4_3=0;}
Flash操作API函数包括复位K9F1208、验证K9F1208的ID号、擦除K9F1208某一扇区、读取K9F1208某一扇区数据和写入K9F1208某一扇区数据等函数。因为篇幅关系,只介绍页读取和页编程函数。
图6是读取K9F1208某一扇区或某一页的数据流程图。首先,开始向K9F1208发送页读取命令字Ox00,使得K9F1208的命令寄存器接收到命令字;然后取得要读取扇区的地址,连续向K9F1208发送4个地址数据,发送完后读取K9F1208的R/B引脚的状态,直到K9F1208不忙(表示地址数据已接收完毕);K9F1208开始读取该地址所指的扇区,并向数据总线发送一个扇区的数据,此时读取K9F1208的数据总线,直到整页结束。
图7是写入K9F1208某一扇区或一页的数据流程图。首先向K9F1208发送页编程的命令字Ox80,使得K9F1208的命令寄存器接收到命令字;然后取得要写入扇区的地址,连续向K9F1208发送4个地址数据,发送完后读取K9F1208的R/B引脚的状态,直到K9F1208不忙(表示地址数据已接收完毕);K9F1208准备从数据总线接收一个扇区的数据,此时向K9F1208的数据总线发送一个扇区的数据,让K9F1208接收数据,并存到相应的页或扇区中;待发送的数据结束后,向K9F1208发送Oxl0命令,使得K9F1208结束页编程的操作;最后向K9F1208发送查询状态的命令字Ox70,K9F1208接收到命令字后,就会向数据总线发送一个字节的数据,这时读取K9F1208的数据总线,若收到字节Ox00,则表示操作成功,若收到字节0x01,则表示操作失败。
结语
本文介绍了Samsung公司K9F1208芯片特点,并在此基础上设计了基于uPSD3234A的驱动设计。该方法对其他相关SoC中实现NANDFlash的控制方法设计有直接的参考意义,可广泛应用于需要大存储容量的低端设备中。