我写入的DataFlash的驱动程序如下
/*
* MyDataFlash.c
*
* Created on: Aug 25, 2022
* Author: Lee
*/
#include "MyDataFlash.h"
#include "config.h"
#include "mul
tiCentral.h"
volatile uint8_t MacAddr_Update_Flag=0;
uint8_t MyDataFlash_Check(void)
{
u8 temp;
EEPROM_READ(FIRST_POWON_ADDR,&temp, 1);//避免每次开机都写DataFlash
EEPROM_READ(SLAVE1_STARTADDR,&PeerAddrDef[0], 6);
EEPROM_READ(SLAVE2_STARTADDR,&PeerAddrDef[1], 6);
PRINT("Device %d - Addr %02x %02x %02x %02x %02x %02x n", 0,
PeerAddrDef[0].peerAddr[0],
PeerAddrDef[0].peerAddr[1],
PeerAddrDef[0].peerAddr[2],
PeerAddrDef[0].peerAddr[3],
PeerAddrDef[0].peerAddr[4],
PeerAddrDef[0].peerAddr[5]);
PRINT("Device %d - Addr %02x %02x %02x %02x %02x %02x n", 1,
PeerAddrDef[1].peerAddr[0],
PeerAddrDef[1].peerAddr[1],
PeerAddrDef[1].peerAddr[2],
PeerAddrDef[1].peerAddr[3],
PeerAddrDef[1].peerAddr[4],
PeerAddrDef[1].peerAddr[5]);
if(temp==FIRST_POWON_VALU)return 0;
else//排除第一次初始化的情况
{
memcpy(&PeerAddrDef[0],"x99x59x9Cx4Cx17x20",6);
EEPROM_WRITE(SLAVE1_STARTADDR, &PeerAddrDef[0], 6);
memcpy(&PeerAddrDef[1],"x59x59x9Cx4Cx17x20",6);
EEPROM_WRITE(SLAVE2_STARTADDR, &PeerAddrDef[1], 6);
temp=FIRST_POWON_VALU;
EEPROM_WRITE(FIRST_POWON_ADDR, &temp, 1);
EEPROM_READ(FIRST_POWON_ADDR, &temp, 1);
if(temp==FIRST_POWON_VALU)return 0;
}
return 1;
}
void MyDataFlash_SaveMAC( uint8_t* Addr1,uint8_t* Addr2)
{
uint8_t d[12]={0};
PRINT("Device %d - Addr %02x %02x %02x %02x %02x %02x n", 0,
Addr1[0],
Addr1[1],
Addr1[2],
Addr1[3],
Addr1[4],
Addr1[5]);
PRINT("Device %d - Addr %02x %02x %02x %02x %02x %02x n", 1,
Addr2[0],
Addr2[1],
Addr2[2],
Addr2[3],
Addr2[4],
Addr2[5]);
EEPROM_WRITE(SLAVE1_STARTADDR, Addr1, 6);
EEPROM_WRITE(SLAVE2_STARTADDR, Addr2, 6);
}
另有头文件如下
/*
* MyDataFlash.h
*
* Created on: Aug 25, 2022
* Author: Lee
*/
#ifndef _MYDATAFLASH_H_
#define _MYDATAFLASH_H_
#include "CH58x_common.h"
#define FIRST_POWON_ADDR 0xFF//第一次开机校验的值存储的地址
#define FIRST_POWON_VALU 0xA5//第一次开机校验的值
#define SLAVE1_STARTADDR 0x00//从机1的mac在dataflash中的首地址
#define SLAVE2_STARTADDR SLAVE1_STARTADDR+6//从机2的mac在dataflash中的首地址
extern volatile uint8_t MacAddr_Update_Flag;
extern uint8_t MyDataFlash_Check(void);
extern void MyDataFlash_SaveMAC( uint8_t* Addr1,uint8_t* Addr2);
#endif /* _MYDATAFLASH_H_ */
现在发现MyDataFlash_SaveMAC这个函数写入的值如下
Device 1 - Addr 99 59 9c 4c 17 20
Device 2 - Addr 59 59 9c 4c 17 20
然后开机通过这个
MyDataFlash_Check
函数读出:
Device 0 - Addr 59 19 9c 4c 17 20
Device 1 - Addr 89 51 9c 4c 17 20
发现前面两个字节变掉了