完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,代码中用到DataFlash一般也会有写Flash的函数在代码中,要注意上下电过程芯片不正常的时候代码跑飞的风险,意外进入Flash写函数。
extern UINT8 FLASH_CHECK_BYTE_1; extern UINT8 FLASH_CHECK_BYTE_2; UINT8 UserDefFlashErase( UINT16 Addr, UINT16 len ) { bit e_all; UINT8 status; /* 返回操作状态 */ UINT8 FlashType; /* Flash 类型标志 */ UINT16 addr = Addr+UserDefineFlashAddr; UINT16 restlen = len; /* 判断是否可以正常执行FLASH操作 */ if( ( FLASH_CHECK_BYTE_1 != DEF_FLASH_OP_CHECK1 ) && ( FLASH_CHECK_BYTE_2 != DEF_FLASH_OP_CHECK2 ) ) { //FLASH_CHECK_BYTE_1和FLASH_CHECK_BYTE_2通常在USB中断中满足一定条件置位,或者在GPIO中断中置位,这个标志的置位来源一定是芯片外部操作实现的,防止自己就擦写了 return 0x02; } if((addr>=DATA_FLASH_ADDR) && (addr/* DataFlash区域 */ { FlashType = bDATA_WE; } else /* CodeFlash区域 */ { FlashType = bCODE_WE; } SAFE_MOD = 0x55; /* 进入安全模式 */ SAFE_MOD = 0xAA; //下面就是FLASH的擦(554以下不需要擦)、写、读 //操作结束之后FLASH_CHECK_BYTE_1和FLASH_CHECK_BYTE_2及时复位 GLOBAL_CFG |= FlashType; do { ROM_ADDR = addr; /* 写入目标地址 */ ROM_BUF_MOD = bROM_BUF_BYTE; /* 选择块擦除模式或单字节编程模式 */ ROM_DAT_BUF = 0; /* 擦写数据缓冲区寄存器为0 */ if ( ROM_STATUS & bROM_ADDR_OK ) /* 操作地址有效 */ { ROM_CTRL = ROM_CMD_ERASE; /* 启动擦除 */ if(ROM_STATUS & bROM_CMD_ERR) { status = 0x02; /* 未知命令或超时 */ return status; } else { status = 0x00; /* 操作成功 */ } } else { status = 0x01; /* 地址无效 */ return status; } addr += 64; if( restlen >= 64 ) { restlen -= 64; } else if( restlen 64 ) { restlen = 0; } }while( restlen ); SAFE_MOD = 0x55; /* 进入安全模式 */ SAFE_MOD = 0xAA; GLOBAL_CFG &= ~FlashType; /* 开启写保护 */ EA = e_all; /* 恢复全局中断状态 */ CH549WDTModeSelect(1); /* 启动看门狗 */ return status; } |
|
|
|
只有小组成员才能发言,加入小组>>
463 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2868 浏览 2 评论
2357 浏览 1 评论
808浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
630浏览 1评论
492浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
356浏览 1评论
630浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:29 , Processed in 0.883728 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号