完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我写入的DataFlash的驱动程序如下
/* * MyDataFlash.c * * Created on: Aug 25, 2022 * Author: Lee */ #include "MyDataFlash.h" #include "config.h" #include "multiCentral.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 发现前面两个字节变掉了 |
|
相关推荐
1个回答
|
|
可以打印8个字节的大小,uuid是8个字节的大小,包含了mac地址的信息,上面打印6个字节的大小可能正好是错开了。在处理时先擦除一下。
参考一下我们的FLASH例程,里面就有获取MAC地址的函数 如果想要获取配对设备的MAC地址信息,可以根据广播包对应筛选 |
|
|
|
只有小组成员才能发言,加入小组>>
492 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2885 浏览 2 评论
2377 浏览 1 评论
836浏览 2评论
512浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
380浏览 1评论
658浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
396浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 20:03 , Processed in 0.974447 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号