项目简介
本项目聚焦AVR微控制器,通过CRCSCAN外设对Flash内存开展Cyclic Redundancy Check(CRC)操作,利用Nonvolatile Memory Controller(NVMCTRL)外设实现Flash内存的读写操作。旨在确保Flash内存代码完整,检测潜在故障,支持用户在运行时与Flash内存交互。
项目的主要特性和功能
- CRC扫描:CRCSCAN外设能周期性对整个Flash内存进行CRC计算,并与预计算值对比,结果显示在终端窗口。
- 内存分区管理:Flash内存分为Boot Code、Application Code和Application Data三个部分,应用程序加载到指定的APPCODE区域。
- 实时读写操作:借助NVMCTRL外设,可在运行时对Flash内存进行读写。
- 用户交互:按下开关,可向Flash内存的APPDATA区域写入数据,使后续CRC扫描失败并点亮LED灯;再次按下开关可恢复数据,让CRC扫描恢复正常。
安装使用步骤
硬件准备
把AVR128DA48 Curiosity Nano评估板通过标准微型B USB电缆连接到主机(PC)。
软件安装
确保安装以下软件,且版本需相同或更新: - Atmel Studio 7.0.2397 - AVR/GNU C编译器 - Atmel START - AVR - Dx DFP 1.3.67 - Standalone Data Visualizer v2.20.674
项目配置与编程
- 打开Atmel Studio,选“File -> Open Project”打开CRCSCAN on Flash Memory项目。
- 在项目的“post - build command section”添加相应命令,预计算CRC校验和并存储在Flash内存末尾:
- 16位CRC:
srec_cat "$(OutputDirectory)\$(OutputFileName).hex" -intel -fill 0xFF 0 0x1FFFE -crop 0 0x01FFFE -CRC16_Big_Endian 0x1FFFE -broken -o "$(OutputFileName)_crc.hex" -intel -line - length = 44
- 32位CRC:
srec_cat "$(OutputDirectory)\$(OutputFileName).hex" -intel -fill 0xFF 0 0x1FFFC -crop 0 0x01FFFC -CRC32_Little_Endian 0x1FFFC -ccitt -o "$(OutputFileName)_crc.hex" -intel -line - length = 44
- 16位CRC:
- 在“Project -> Properties -> Toolchain -> AVR/GNU Linker -> Memory Settings -> Flash segment”添加命令
.text = 0x200
,将应用程序加载到APPCODE区域。 - 点击构建图标构建解决方案,确保无构建错误。
- 进入Fuses选项卡,配置相关寄存器:
- 16位CRC:将SYSCFG0寄存器中的CRCSEL位设为Enable CRC16,CRCSRC位设为CRC OF FULL FLASH,BOOTSIZE寄存器设为0x02,CODESIZE寄存器设为0XFE,然后点击Program。
- 32位CRC:将SYSCFG0寄存器中的CRCSEL位设为Enable CRC32。
- 选“Tools -> Device Programming”,选工具并点击Apply。
- 进入“Production file”选项卡,浏览项目文件夹中的_crc.hex文件,勾选Flash和Fuses选项,点击Save,保存为
.elf
格式文件。 - 再次进入“Production file”选项卡,浏览保存的
.elf
文件,勾选Flash和Fuses选项,点击Program。
运行演示
- 打开Standalone Data Visualizer,选AVR DA Curiosity Nano板连接的虚拟COM端口,点击Connect。
- 编程完成后,终端窗口开始显示消息。
- 8秒后CRCSCAN开始,状态显示在终端窗口。
- 按下开关(SW0),改变Flash内存中指定位置的数据,观察CRC扫描结果和LED灯状态变化。
注意:编程_crc.hex文件前,需清理项目。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】