打印
[技术问答]

关于N76E003的IAP

[复制链接]
1434|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2083759|  楼主 | 2017-5-27 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用N76E003的IAP保存累时数据,一分钟保存一次,
问题是N76E003的IAP是不是每次写数据都要擦除
如果每次擦除不是用不了多久100000次就用完了
部分代码如下:
volatile unsigned char code vss_hze_Flash[128] _at_ 0x3800;

void Erase_DATAFLASH(u16 IAP_addr)     //擦除
{
                EA=0;
        TA = 0xAA; //CHPCON受TA保护
                TA = 0x55;
                CHPCON |= 0x01; //IAPEN = 1, 启用IAP模式
                TA = 0xAA; //IAPUEN受TA保护
                TA = 0x55;
                IAPUEN |= 0x01; //APUEN = 1, 启用APROM更新
                IAPCN = PAGE_ERASE_AP; //擦除页面200h-27Fh
                IAPAL = IAP_addr;
                IAPAH = IAP_addr>>8;
                IAPFD = 0xFF;
                TA = 0xAA; //IAPUEN受TA保护
                TA = 0x55;
                IAPTRG |= 0x01; //将I写入'1'以触发IAP进程
                EA=1;
}
void write_DATAFLASH(u16 IAP_addr,u8 IAP_data)     //写数据
{
                EA=0;
                TA = 0xAA; //IAPTRG受TA保护
                TA = 0x55;
                CHPCON |= 0x01; //IAPEN = 1, 启用IAP模式
                TA = 0xAA; //IAPUEN受TA保护
                TA = 0x55;
                IAPUEN |= 0x01; //APUEN = 1, 启用APROM更新
               
                IAPCN = BYTE_PROGRAM_AP; // 编程 201h with 55h
                IAPAL = IAP_addr;
                IAPAH = IAP_addr>>8;
                IAPFD = IAP_data;

                TA = 0xAA;
                TA = 0x55;
                IAPTRG |= 0x01; //将I写入'1'以触发IAP进程
                TA = 0xAA; //IAPUEN受TA保护
                TA = 0x55;
                IAPUEN &= ~0x01; //APUEN = 0, 禁用APROM更新
                TA = 0xAA; //CHPCON受TA保护
                TA = 0x55;
                CHPCON &= ~0x01; //IAPEN = 0, 禁用IAP模式
                EA=1;
}

                //调用写16bit数据
                 Erase_DATAFLASH(0x3800);
                 write_DATAFLASH(0x3800,byte0);
                 write_DATAFLASH(0x3801,byte1);

               //读数据
                 byte0=vss_hze_Flash[0];
                 byte1=vss_hze_Flash[1];

沙发
天灵灵地灵灵| | 2017-5-27 14:15 | 只看该作者
你开辟一个区,轮番写,不要总对一个固定地址写,循环写。。。

使用特权

评论回复
板凳
wahahaheihei| | 2017-5-27 15:25 | 只看该作者
肯定不能总对着一个地址擦写啊,要顶一个循环,比如定义三个擦写的单元,擦除1,写2;擦除2,写3,擦除3写1;这么循环来。

使用特权

评论回复
地板
2083759|  楼主 | 2017-5-27 21:13 | 只看该作者
wahahaheihei 发表于 2017-5-27 15:25
肯定不能总对着一个地址擦写啊,要顶一个循环,比如定义三个擦写的单元,擦除1,写2;擦除2,写3,擦除3写1 ...

是,我是往60页循环写的,只是觉得这样有点浪费,一页一般就写一字节,擦除还费时间,这方面没有STM8S003的好

使用特权

评论回复
5
wahahaheihei| | 2017-5-27 22:46 | 只看该作者
2083759 发表于 2017-5-27 21:13
是,我是往60页循环写的,只是觉得这样有点浪费,一页一般就写一字节,擦除还费时间,这方面没有STM8S003 ...

你这是浪费啊,你的写法有问题,你不一定每次都擦除啊,定义一个特殊标记,只确认最后一个的,当够一个页了再擦除。。比如一个页面可以写三个单元,你就确认使用最后那个单元的,写满了一个页再擦除了写后面那个页。

使用特权

评论回复
6
liushiming82| | 2019-5-20 18:10 | 只看该作者
只能在0x3800这个地址写数据吗?我用0x4700为什么不行呀

使用特权

评论回复
7
liushiming82| | 2019-5-21 09:05 | 只看该作者
楼主,能不能把你的N76E003R的IAP程序分享一下,谢谢

使用特权

评论回复
8
xinpian101| | 2019-5-21 23:25 | 只看该作者
应该不是这么回事吧,你写满了需要重写时候才擦。

使用特权

评论回复
9
21mengnan| | 2019-5-22 23:12 | 只看该作者
根据需要规划好空间。

使用特权

评论回复
10
天灵灵地灵灵| | 2019-5-23 20:13 | 只看该作者
你这保存的太频繁了。

使用特权

评论回复
11
天灵灵地灵灵| | 2019-5-23 20:14 | 只看该作者
建议重新规划,不要对flash擦写太频繁,需要最终保存的时候再写入。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

79

帖子

2

粉丝