- //----------------------------------------------------------
- // 函数: Flash_Init()
- // 参数:
- // 说明: 复位AT45DB161芯片到512Bytes/Page模式,注意本函数仅
- // 运行一次就够了
- // 返回: 无
- // 创建:
- // 修改:
- //----------------------------------------------------------
- void Flash_Init()
- {
- AT45161_CLK = 1; //CLK为高
- AT45161_CS(0);
- Flash_Byte_Write(0x3d);//设置为512字节/页模式的命令==0x3d2a80a6
- Flash_Byte_Write(0x2a);
- Flash_Byte_Write(0x80);
- Flash_Byte_Write(0xa6);
- AT45161_CS(1);
- }
- //----------------------------------------------------------
- // 函数: Flash_Write(...)
- // 参数: address:写AT45DB161D的起始地址
- // data:被写数据的缓冲区
- // nbytes:要写入的字节数
- // 说明: 写一定字节的数据到AT45DB161D指定地址
- // 返回: 无
- // 创建:
- // 修改:
- // 命令格式:连续写=8位命令82H+3位任意+21位地址
- // 1000 0010 ???a aaaa aaaa aaaa aaaa aaaa
- //----------------------------------------------------------
- void Flash_Write(ulong address, uchar* buf, uint nbytes)
- {
- uint i;
- uchar status = 0;
- AT45161_CLK = 1; //CLK为高
- AT45161_CS(0);
- address |= ((ulong)0x82<<24);
- for(i=0; i<4; i++) //4字节命令/地址
- Flash_Byte_Write((address>>(24-8*i)) &0xff);
- while(nbytes--) Flash_Byte_Write(*buf++);
- AT45161_CS(1);
- while((status & 0x80) == 0)
- { //读回状态寄存器,Bit7=1说明写成功了
- AT45161_CS(0); //注意读状态寄存器时对CS信号的要求!
- Flash_Byte_Write(0xD7);
- Flash_Byte_Read(&status);
- AT45161_CS(1);
- }
- AT45161_CS(1);
- }
|