Flash 编程

FM33A048B 支持以下Flash 编程方法:
⚫ 在系统编程(ISP):通过FMSH 专用编程器或者KEIL 用户界面实施芯片编程,使用SWD 接

⚫ 在应用编程(IAP):通过bootloader 代码实现芯片自编程,用户可定义任意串口,可用于实现
程序在线升级

Flash 擦写方法
FM33A048B 支持Flash 擦除操作,以及单次编程和连续编程。执行Flash 擦写使用校准后的RCHF 时
钟,而此时CPU 运行的系统时钟可以是任意时钟。
注意,在擦写Flash 时,必须保证RCHF 开启,并且RCHF 频率选择为8/16/24MHz,当RCHF 为其
他频率时,无法保证Flash 擦写的可靠性。
Flash 擦写前须进行Key 校验,写入顺序错误或写入值错误,或者在Flash Key 验证正确之前就进行
擦除或编程Flash 操作将会进入错误状态,并产生相应中断。Flash Key 认证错误之后将禁止擦写Flash
直到下一次复位。而在正常擦写完成后,向KEY 寄存器写入任意值都会使状态机返回初始的写保护
状态。

全擦操作(Chip Erase)
全擦操作只能由SWD 接口启动,软件禁止进行全擦。全擦操作仅擦除main array,硬件确保NVR
引脚拉低,不会擦除NVR 扇区。SWD 操作流程如下:
⚫ 编程器通过SWD 配置ERTYPE 寄存器为10
⚫ 编程器通过SWD 清除PREQ 寄存器,置位EREQ 寄存器
⚫ 编程器通过SWD 写入Flash 全擦Key:0x9696_9696 和0x7D7D_7D7D
⚫ SWD 向Flash 任意地址写擦除请求0x1234_ABCD
⚫ NVMIF 启动对Flash 的全擦,并暂停任何Master 对Flash 的访问
⚫ 全擦完成后置位中断标志和全擦标志(全擦标志表示main array 全部擦除,任何对main array
的编程将清除此标志)
⚫ 在全擦标志有效的情况下,SWD 可以任意擦写NVR5,否则擦写NVR5 被禁止并触发错误中断
⚫ 软件确认擦除结束后向FlashKEY 寄存器写任意值恢复写保护
全擦操作不会擦除已经映射使用的冗余扇区。对于冗余扇区, 应先从地址
0x1FFFFE20/0x1FFFFE24/0x1FFFFE28/0x1FFFFE2C 中,读出4 words 冗余扇区映射信息,然后根据
映射信息以及5.2 章节Flash 逻辑地址映射关系,参照下一小节内扇区擦操作的流程,擦除被映射使
用的扇区

扇区擦操作(Sector Erase)
SWD和应用代码都可以执行扇区擦。操作流程如下:
⚫ 配置 ERTYPE 寄存器为 00
⚫ 清除 PREQ 寄存器,置位 EREQ 寄存器
⚫ 写入 Flash 擦 除 Key 0x9696_9696 和 0xEAEA_EAEA
⚫ 向需要擦除的扇区内任意地址写擦除请求 0x1234_ABCD
⚫ NVMIF 检查目标扇区是否属于被 ACLOCK 锁定的 Block ,如果没有锁定则启动对目标扇区的
擦除,如果 被锁定则触发错误标志
⚫ 扇区擦完成后置位中断标志
⚫ 软件确认擦除结束后向 FlashKEY 寄存器写任意值恢复写保护

单次编程
单次编程由软件发起,通过总线直接写Flash,每次操作可执行byte/half-word/word编程,操作流程如下:
⚫ 清除 EREQ 寄存器,置位 PREQ 寄存器
⚫ 清除连续编程使能寄存器
⚫ 写入 Flash 编程 Key 0xA5A5_A5A5 和 0xF1F1_F1F1
⚫ 向 Flash 目标地址写数据,如果目标地址被 ACLOCK 锁定,则触发错误标志,如果没有锁定,
则执行编程
⚫ Byte 写入直接完成, half word 写入则由 NVMIF 自动执行 2 次 byte program word 编程由 NVMIF
执行 4 次 byte program
⚫ 编程完成后置位中断标志
⚫ 软件确认编程结束后向 FlashKEY 寄存器写任意值恢复写保护

连续编程
连续编程指通过DMA的Memory通道一次向Flash写入half-sector(256字节)。连续编程时DMA从RAM指定地址读取数据,Flash目标编程地址必须是half-sector对齐的,也就是Flash地址低6位为0。采用这种方式时一次编程的数据长度是固定的,主要用于快速大数据量写入。
在启动连续编程期间,DMA完全占据Flash总线,暂停CPU对Flash的一切访问。连续编程的操作流程如下:
⚫ 清除 EREQ 寄存器,置位 PREQ 寄存器
⚫ 置位连续编程使能寄存器( DMA 模式使能)
⚫ 向 RAM 中写入 256 字节待编程数据
⚫ 配置 DMA 存储器通道,设定传输方向、读地址和写地址
⚫ 使能 DMA 存储器通道
⚫ 写入 Flash 编程 Key 0xA5A5_A5A5 和 0xF1F1_F1F1
⚫ 软件触发 DMA 存储器通道, DMA 连续 64 次读取 RAM 并对 Flash 编程, NVMIF 每收到 1 个
word 自动完成 4 次 byte pro gram
⚫ NVMIF 检查被编程扇区是否被 ACLOCK 锁定,如果锁定则触发错误中断并通知 DMA 停止编

⚫ 256 字节完全编程结束后产生中断,释放 Flash 总线
⚫ 软件确认编程结束后向 FlashKEY 寄存器写任意值恢复写保护
注意:如果CPU在Flash中取指时进行Flash擦写,则CPU取指将被暂停,直到擦写操作完成。如果CPU跳转到RAM中取指运行,则Flash擦写不会暂停CPU的执行。Flash擦写过程中,若用户希望在RAM中执行代码时仍然能够实时响应中断,应将中断向量表重新映射到RAM中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
RH8501是一种用于嵌入式系统的微控制器芯片,它具有强大的处理能力和丰富的外设接口。编程RH8501的其中一个要方面就是Flash编程Flash编程是指将程序代码和数据存储到芯片的Flash存储器中的过程。通过Flash编程,我们可以向芯片中写入程序代码、配置参数和存储数据,从而实现系统的各种功能。 RH8501的Flash编程通常采用以下步骤: 1. 准备开发环境:首先需要安装适当的开发工具和编译器,例如Renesas提供的e² studio IDE和GCC编译器。这些工具将帮助我们编写、编译和调试代码。 2. 编写代码:根据系统需求,我们需要编写适当的程序代码。可以使用C、C++或汇编语言编写,具体取决于开发者的喜好和项目要求。 3. 编译代码:使用编译器将编写的源代码转换为机器代码。编译过程会生成可执行文件,其中包含了程序指令和数据。 4. 链接代码:将编译后的对象文件、库文件和启动代码等合并到一个可执行文件中。链接过程会生成用于烧录到Flash存储器的二进制文件。 5. 烧录Flash:使用专门的烧录器将生成的二进制文件写入RH8501的Flash存储器中。烧录过程需要连接烧录器和目标芯片,并按照烧录器的操作指南进行操作。 6. 测试和调试:完成烧录后,需要对系统进行测试和调试。通常会使用调试工具,例如JTAG调试器,来检查代码执行过程中的错误,并进行必要的修复和调整。 总的来说,RH8501的Flash编程是一项关键的工作,它确保了系统硬件与软件的良好配合,使系统能够正常运行和提供所需的功能。通过正确的编写、编译和烧录流程,能够实现高效、稳定和安全的Flash编程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小菜鸡叶不凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值