OpenEdv-开源电子网

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

关于AT45DB161存储字库的问题

[复制链接]

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
发表于 2017-12-12 15:38:19 | 显示全部楼层 |阅读模式
我使用AT45DB161Dflash存储字模,看网上基本都是通过串口一个个byte传进来再存储,但我试了好像只能存第一页,后面就发生了错误
有没有大神帮我看看是不是写时序不对,还是在串口中断处理的有什么问题

AT45DB161存储字模.rar

5 MB, 下载次数: 112

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

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-12 16:09:12 | 显示全部楼层
解决了,还是用我程序里面串口中断处理函数的另一种做法,在进行每256byte传输延时一会
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-12 16:12:53 | 显示全部楼层
本帖最后由 YK山羊 于 2017-12-12 17:20 编辑

我发现我的错误了,就是串口中断处理函数的变量应该定义成static,导致每次进中断都给它清零了
void USART1_IRQHandler(void)
{  
  static u8 data[256]={0},i=0;
  static u32 WriteAddress=0;
  
  if ( USART_GetITStatus(USART1, USART_IT_RXNE) == SET && usart1->status == RECV_ING )
  {
    if(i < 255)  
    {
      data = USART_ReceiveData(USART1);
      i ++;
    }
    else //i=255,&#180;&#174;&#191;&#218;·&#162;&#203;&#205;&#192;&#180;&#181;&#218;256&#184;&#246;byte&#202;±&#198;&#244;&#182;&#175;&#208;&#180;&#200;&#235;flash
    {  
      data = USART_ReceiveData(USART1);
      i = 0;
      SPI_FLASH_BufferWrite(data, WriteAddress, 256);
      WriteAddress +=256;
      if(WriteAddress > 216576)//×&#214;&#191;&#226;&#185;&#178;216576 byte
      {
        usart1->status = RECV_DOWN;
      }
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);
    }      
  }
}
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-13 10:57:47 | 显示全部楼层
本帖最后由 YK山羊 于 2017-12-13 11:02 编辑

怎么显示有的可以有的不行啊,我看这没显示出的大概轮廓都对,是不是这个取模软件有问题,我是纵向正序取模方式,有没有遇到这样的

IMG_6168.JPG
TIM截图20171213105555.png
TIM截图20171213110122.png

字模3.rar

2.53 MB, 下载次数: 88

取模软件

回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-15 12:49:35 | 显示全部楼层
本帖最后由 YK山羊 于 2017-12-15 12:53 编辑

经过反复找方法终于解决了!主要注意两个方面吧,第一,网上有人说这个AT45DB161D的chip erase不稳定,最好不要用,这个我根据他的指示在datasheet的第52页也得到证实,所以马上修改了erase的方法,改为sector erase,因为我用的GB2312的16x16点阵字模,一共就216576byte,按我每页存512byte算,只需216576/512=423page,看了下手册里的Memory Array 知道只需erase sector 0a (8page),sector 0b(248page),sector 1(256page),这几个sector就够存字模了,但是好像并没有什么作用,不管怎么样手册都说最好不要用chip erase,我只好保留sector erase方法来试验这个第二种方法,就是改变存储顺序,改为每512byte存一下,串口助手还是设置成每发256byte延时一下,当接收到512byte时再向flash中写。一切搞定,先erase传数据再注释erase步骤再下载进单片机观察等这些步骤再次走完。。。。。。。。。然后就发现空气是那么的清新了。。。。哈哈,我这个新手上路,见少识浅,允许我稍稍膨胀一下下。。。。。。。。。。我分析了我错误在哪了,就是理解错了buffer向Memory传送的方式,还是整存整传的好!

TIM截图20171215124811.png
TIM截图20171215114453.png
TIM截图20171215115046.png
IMG_6170.JPG
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-16 21:13:53 | 显示全部楼层
YK山羊 发表于 2017-12-15 12:49
经过反复找方法终于解决了!主要注意两个方面吧,第一,网上有人说这个AT45DB161D的chip erase不稳定,最好 ...

谢谢分享
是不是有一种成就感?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-18 09:16:00 | 显示全部楼层
正点原子 发表于 2017-12-16 21:13
谢谢分享
是不是有一种成就感?

原子哥,现在又出现新问题了,为什么板子得接着jlink它才能正常运行,我把程序下载了,只单独给板子上电运行它却卡在一个地方不走了,RESET也没有用,这是什么情况?
回复 支持 反对

使用道具 举报

8

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2017-12-12
在线时间
103 小时
 楼主| 发表于 2017-12-18 10:25:23 | 显示全部楼层
YK山羊 发表于 2017-12-18 09:16
原子哥,现在又出现新问题了,为什么板子得接着jlink它才能正常运行,我把程序下载了,只单独给板子上电 ...

我参考这个帖子把这个板子上jtag接口边的R64换成1K就好了,但是还是不懂什么原理........................
https://www.amobbs.com/forum.php ... 6&highlight=USB
TIM截图20171218102129.png
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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