- 打卡等级:以坛为家II
- 打卡总天数:484
- 最近打卡:2025-05-01 08:52:01
已绑定手机
金牌会员
- 积分
- 2813
|
我在往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 ); //串口返回要写入的信息
}
|
|