打印
[STM32F1]

AT45DB321D写入或擦除命令在命令+地址+无关位4字节后要再加1字节为啥

[复制链接]
1902|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baita|  楼主 | 2014-11-7 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用AT45DB321D时,我写的程序只要是有涉及到有擦除功能的命令,在命令+地址+无关位4字节写入后要再加写1字节无关字节才能正常工作否则就被忽略不执行为啥。所有的读功能都没问题不用加1个字节无关字节,我查了好几天哪里都对看不出哪有问题,希望高手指点一二。使用stm32f103C8T6的SPI2串口 。
传个函数大家看看
//*****************************************************************************
//!\缓冲区编程到主存储器页。操作码(缓冲区1 0x88,缓冲区2 0x89)
//! \参数BufferNum指定缓冲器1或2作为目标。
//! \参数PageAddr页起始地址。
//!将指定的缓冲区的数据转到指定的主存储器页里带内无擦除
//*****************************************************************************
void AT45DB321DBuf_PageW(unsigned char BufferNum, unsigned short PageAddr)
{
    while(!(Status_Reg_Read ()&0x80));//判断是否忙
    AT45DB321D_CS_CLR;       
    if (BufferNum == AT45DB321D_BUF1)
                        {
                                        SPI_WriteByte (0x88);//将缓冲区1的数据写入到页带擦除指令
                        }
    else
                        {
                                 SPI_WriteByte (0x89);//将缓冲区2的数据写入到页带擦除指令
                        }
          SPI_WriteByte ((unsigned char)(PageAddr>>6));
          SPI_WriteByte ((unsigned char)(PageAddr<<2));
          SPI_WriteByte (0x00);
                SPI_WriteByte (0x00);//不加这一句不工作
            AT45DB321D_CS_SET;
}
沙发
baita|  楼主 | 2014-11-8 09:35 | 只看该作者
自问自答吧,问题找到了因为第一次用SPI没经验哈哈。是最后一个字节发送还没等SPI真正传送结束我就把片选置1了。加了条 while (SPI2_SR7 == 1);//SPI判忙 一切OK

使用特权

评论回复
板凳
cainiao518| | 2018-7-29 16:15 | 只看该作者
baita 发表于 2014-11-8 09:35
自问自答吧,问题找到了因为第一次用SPI没经验哈哈。是最后一个字节发送还没等SPI真正传送结束我就把片选置 ...

解决就好

使用特权

评论回复
地板
skyjz| | 2022-12-28 13:20 | 只看该作者
SPI_WriteByte ((unsigned char)(PageAddr>>6));
          SPI_WriteByte ((unsigned char)(PageAddr<<2));

使用特权

评论回复
评论
skyjz 2022-12-28 13:20 回复TA
这两句是啥意思呢 6,跟2是怎么确定的嘞 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

33

帖子

0

粉丝