WHX 发表于 2023-4-29 09:28:32

关于EEPROM存储地址设置到最后0.5K时,写入及读出错误

我在往EEPROM里面写入及读取数据时,无论几个数据,只要是地址从0x0000设置都可以;但是当我需要把EEPROM存储地址设置到0XFE01、0xFE00、0XFDFF、0XFDFD(最后0.5K)时,写入及读出都会错误。真有点不知所措了,在此贴上读、写代码,恳请大神们指点指点,感谢啦!

一、读取代码:

      //下面的 recv_buff为接收到的数据临时数组缓存、 recv_len为接收到的数据长度
      u16 xdata i = 2;                                                 //判断数据起始点
        u8 xdata j = 0;
      u8 w_r_flag = 1;                                                //读写标志

      u8 xdata data[ 9 ];                                             //各个数据临时缓存
        for ( j = 0; j < 8; j++ )                                       //判断第2~7个数据是否为0
        {
                if ( recv_buff[ i + j ] != 0 )
                {
                        /*若接收到的数据域里面有不为0的数据,就判定为此时为写入*/
                        w_r_flag = 1;                                     //写入指令
                        break;
                }else   w_r_flag = 0;                                 //读取指令
        }
        if ( w_r_flag == 0 )                                             //获取接收到的信息
        {
                IapReadData(0xFE00, data, 9);                     //从eeprom里面的地址0xFE00开始连读
                recv_buff[ i++ ] = data[ 0 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 1 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 2 ];                         //获取并存入缓存
                recv_buff[ i++ ] = data[ 3 ];                         //获取并存入缓存
                recv_buff[ i++ ] = data[ 4 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 5 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 6 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 7 ];                        //获取并存入缓存
                recv_buff[ i++ ] = data[ 8 ];                        //获取并存入缓存
               Transfer_Car_Uart_Send( recv_buff, i );          //发送函数(已测试通过),此处原型略;目的把从eeprom连读的数据返回。

      }

二、写入代码:

      if ( w_r_flag == 1 )                                             //写入接收到的信息
      {
                data[ 0 ] = recv_buff[ 2 ];
                data[ 1 ] = recv_buff[ 3 ];
                data[ 2 ] = recv_buff[ 4 ];
                data[ 3 ] = recv_buff[ 5 ];
                data[ 4 ] = recv_buff[ 6 ];
                data[ 5 ] = recv_buff[ 7 ];
                data[ 6 ] = recv_buff[ 8 ];
                data[ 7 ] = recv_buff[ 9 ];
                data[ 8 ] = recv_buff[ 10 ];
                IapWriteData(0xFE00, data, 9);                  //把接收到的数据从地址0xFE00连写到EEPROM里面
                i = recv_len;
               Transfer_Car_Uart_Send( recv_buff, i );         //串口返回要写入的信息
        }


      


WHX 发表于 2023-4-29 09:39:13

写入后再次读出都是FF

WHX 发表于 2023-4-29 10:15:48

已经自行解决了,是地址不对,大意了{:sweat:}

kksk 发表于 2023-4-29 10:24:24

读和写都是相对位置,只有movc是绝对地址

神农鼎 发表于 2023-4-29 11:37:20

后面大家还是用支持仿真的STC8/STC32来开发新产品


STC8H8K64U自带硬件USB直接仿真步骤 - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)




深圳国芯人工智能有限公司-常见问题 (stcai.com)

WHX 发表于 2023-4-29 17:21:29

kksk 发表于 2023-4-29 10:24
读和写都是相对位置,只有movc是绝对地址

感谢{:handshake:}

WHX 发表于 2023-4-29 17:22:43

神农鼎 发表于 2023-4-29 11:37
后面大家还是用支持仿真的STC8/STC32来开发新产品




下一次就是改用8H8H64及32G来开发了!{:tongue:}

神农鼎 发表于 2023-4-29 17:30:13

这样就可以共享我们 STC8H8K64U / STC32G12K128 实验箱 和 核心板 上大量正确的开源共享程序

WHX 发表于 2023-4-29 22:40:40

神农鼎 发表于 2023-4-29 17:30
这样就可以共享我们 STC8H8K64U / STC32G12K128 实验箱 和 核心板 上大量正确的开源共享程序 ...

嗯嗯,确实,我选择STC也是因为你们的示例程序及手册越来越丰富了,便于我们开发使用!最主要的还有你们的技术人员很给力,解答及支持很耐心、细致呀!!特别是梁工,感觉我从他那里受益匪浅!!感谢!!

cpu51 发表于 2023-6-27 06:17:36

wenhuixuan 发表于 2023-4-29 10:15
已经自行解决了,是地址不对,大意了

我的情况和你一样,你最后设置地址是多少才正确?
页: [1] 2
查看完整版本: 关于EEPROM存储地址设置到最后0.5K时,写入及读出错误