OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4438|回复: 5

AT45DB081E读写总是不对,谁能帮分析一下

[复制链接]

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
发表于 2016-3-18 14:06:46 | 显示全部楼层 |阅读模式
1金钱
我测试了对buffer1的写入数据和读出数据,都是正确的,我对主存储器直接写入和读取,总是不正确呢?程序如下
#define AT45DB081_writememory1                  0x82
   /* 发送缓冲区初始化 */
uint8_t Tx_Buffer2[264] ;
uint8_t Rx_Buffer2[BufferSize];

#define  BufferSize   264
          /* 发送缓冲区的数据写到主存储器中 */
          AT45DB081_Write_Mainmemory(AT45DB081_writememory1,FLASH_WriteAddress,Tx_Buffer2,BufferSize);
                  /* 将刚刚写入的数据主存储器读出来放到接收缓冲区中 */
          AT45DB081_Read_Mainmemory(Rx_Buffer2,FLASH_ReadAddress,BufferSize);

                   for ( i=0; i<BufferSize; i++ )
           {
                printf("\r\n 读出的数据为:0x%04X \r\n", Rx_Buffer2[i]);
                }


void AT45DB081_Write_Mainmemory(u8 bufferNo,u32 WriteAddr,u8* pBuffer,u16 NumByteToWrite)
{
   u16 i;
    AT45DB081_CS=0;                                    //ê1?ü?÷?t   
    SPI2_ReadWriteByte(bufferNo);              //·¢?íD′ò3?üá?   
    SPI2_ReadWriteByte((WriteAddr & 0xFF0000) >> 16);         //·¢?í24bitμ??·   
    SPI2_ReadWriteByte((WriteAddr & 0xFF00) >> 8);   
    SPI2_ReadWriteByte(WriteAddr & 0xFF);   
    for(i=0;i<NumByteToWrite;i++)SPI2_ReadWriteByte(pBuffer[i]);//?-?·D′êy  
    AT45DB081_CS=1;                                    //è???????
        AT45DB081_Wait_Busy();
}


void AT45DB081_Read_Mainmemory(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{
        u16 i;                                                                                       
        AT45DB081_CS=0;
        SPI2_ReadWriteByte(AT45DB081_Readmemory);                                   //ê1?ü?÷?t       SPI2_ReadWriteByte(AT45DB081_ReadData);                 //·¢?í?áè??üá?   
    SPI2_ReadWriteByte((ReadAddr & 0xFF0000) >> 16);          //·¢?í24bitμ??·   
    SPI2_ReadWriteByte((ReadAddr& 0xFF00) >> 8);   
    SPI2_ReadWriteByte(ReadAddr & 0xFF);   
    SPI2_ReadWriteByte(Dummy_Byte);
        SPI2_ReadWriteByte(Dummy_Byte);
        SPI2_ReadWriteByte(Dummy_Byte);
    SPI2_ReadWriteByte(Dummy_Byte);
       
        for(i=0;i<NumByteToRead;i++)
        {
     pBuffer[i]=SPI2_ReadWriteByte(Dummy_Byte);          //?-?·?áêy  
    }
        AT45DB081_CS=1;                                                   
}






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-3-18 14:06:47 | 显示全部楼层
回复

使用道具 举报

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
 楼主| 发表于 2016-3-18 14:07:31 | 显示全部楼层
#define AT45DB081_Readmemory                0xD2
回复

使用道具 举报

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
 楼主| 发表于 2016-3-19 10:31:46 | 显示全部楼层
void AT45DB081_MainmemorytoBuffer(u8 bufferNo,u32 WriteAddr,u16 NumByteToWrite)
{
    AT45DB081_CS=0;                                    //ê1?ü?÷?t   
    SPI2_ReadWriteByte(bufferNo);              //·¢?íD′ò3?üá?   
    SPI2_ReadWriteByte(WriteAddr >> 7);         //·¢?í24bitμ??·   
    SPI2_ReadWriteByte(WriteAddr<<1 );   
    SPI2_ReadWriteByte(0x00);
        AT45DB081_CS=1;                                    //è???????
        AT45DB081_Wait_Busy();


}

void AT45DB081_MainmemorytoBuffer(u8 bufferNo,u32 WriteAddr,u16 NumByteToWrite)
{
    AT45DB081_CS=0;                                    //ê1?ü?÷?t   
    SPI2_ReadWriteByte(bufferNo);              //·¢?íD′ò3?üá?   
   SPI2_ReadWriteByte((WriteAddr & 0xFF0000) >> 16);         //·¢?í24bitμ??·   
    SPI2_ReadWriteByte((WriteAddr & 0xFF00) >> 8);   
    SPI2_ReadWriteByte(WriteAddr & 0xFF);
        AT45DB081_CS=1;                                    //è???????
        AT45DB081_Wait_Busy();


}



这两个有什么不同  哪个是正确的呢
回复

使用道具 举报

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
 楼主| 发表于 2016-3-19 15:17:23 | 显示全部楼层

谢谢  解决了   。加入AT45DB081_Wait_Busy();   这个函数问题  ,在数据写入的时候没有一定的延时立马进入这个函数会将CS发生电平转换   导致数据写入没写入完   
回复

使用道具 举报

19

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2018-9-3
在线时间
50 小时
发表于 2018-9-13 15:04:02 | 显示全部楼层
guoxiaoyan 发表于 2016-3-19 15:17
谢谢  解决了   。加入AT45DB081_Wait_Busy();   这个函数问题  ,在数据写入的时候没有一定的延时立马进 ...

源代码有吗,我也在学AT45DB081E与stm32的通讯,应该怎么读取呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 17:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表