搜索

[技术问答] 用户数据存储问题

[复制链接]
149|7
 楼主 | 2021-1-9 18:44 | 显示全部楼层 |阅读模式
有高手指导一下,用新唐ML51我要写入100个左右字节数据,用 “Write_DATAFLASH_BYTE(unsigned int u16EPAddr,unsigned char u8EPData)”为什么只能写40多个,其它的写入时就出错了。
谢谢指导!

使用特权

评论回复
| 2021-1-9 18:53 | 显示全部楼层
擦的区域足够嘛

使用特权

评论回复
| 2021-1-9 19:03 | 显示全部楼层
这个地址是不是有问题,看手册这个型号的地方范围了没

使用特权

评论回复
 楼主 | 2021-1-9 20:00 | 显示全部楼层
如下是子程序:
void Write_DATAFLASH_BYTE(unsigned int u16EPAddr,unsigned char u8EPData)
{
  unsigned char looptmp=0;
  unsigned int u16_addrl_r;
  unsigned int RAMtmp;
  
//Check page start address
  u16_addrl_r=(u16EPAddr/265)*256;
//Save APROM data to XRAM0
  for(looptmp=0;looptmp<0x80;looptmp++)
  {
    RAMtmp = Read_APROM_BYTE((unsigned int code *)(u16_addrl_r+looptmp));
    page_buffer[looptmp]=RAMtmp;
  }
// Modify customer data in XRAM
  page_buffer[u16EPAddr&0x7f] = u8EPData;
  
//Erase APROM DATAFLASH page
    IAPAL = u16_addrl_r&0xff;
    IAPAH = (u16_addrl_r>>8)&0xff;
    IAPFD = 0xFF;
    set_CHPCON_IAPEN;
    set_IAPUEN_APUEN;
    IAPCN = 0x22;     
     set_IAPTRG_IAPGO;
   
//Save changed RAM data to APROM DATAFLASH
    set_CHPCON_IAPEN;
    set_IAPUEN_APUEN;
    IAPCN = 0x21;
    for(looptmp=0;looptmp<0x80;looptmp++)
    {
      IAPAL = (u16_addrl_r&0xff)+looptmp;
      IAPAH = (u16_addrl_r>>8)&0xff;
      IAPFD = page_buffer[looptmp];
      set_IAPTRG_IAPGO;      
    }
    clr_IAPUEN_APUEN;
    clr_CHPCON_IAPEN;
}  

使用特权

评论回复
 楼主 | 2021-1-10 10:47 | 显示全部楼层
版主支持一下

使用特权

评论回复
| 2021-1-11 09:23 | 显示全部楼层
u16_addrl_r=(u16EPAddr/265)*256; =>??是256吧

使用特权

评论回复
 楼主 | 2021-1-12 08:24 | 显示全部楼层
jasontu 发表于 2021-1-11 09:23
u16_addrl_r=(u16EPAddr/265)*256; =>??是256吧

感谢!我修改后试试

使用特权

评论回复

评论

18719881206 2021-1-12 08:36 回复TA
还是不行,128时也是能写40个字节 
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表