HT6025芯片(Cortex-M0核bootloader调试)

 最近STM32交期太长,仪表进行国产化芯片替代,使用HT6025(钜泉光电)进行boot调试时遇到下列问题

问题1:中断向量表映射问题

 使用BOOT程序跳转主程序,那么BOOT程序与主程序都有自己的中断向量表。在Cortex-M3的芯片中,芯片上电后先寻Reset_Handler向量位置,内部Flash(rom)中Reset_Handle的位置上存放的是程序的入口地址,找到入口地址后跳转执行,先执行System_init,设置时钟,设置中断向量偏移寄存器SCB->VTOR的值,如果BOOT跳转主程序后发生中断,则去VTOR偏移寄存器指向的位置寻址中断入口。Cortex-M0没有VTOR寄存器,则只能手动映射偏移。

解决方案:

  Cortex-M0发生中断时固定从flash的0x08处寻找中断向量表入口,stm32的M0的核采用了硬件映射的办法,通过控制BOOT1与BOOT0的引脚状态决定代码的启动位置,在BOOT里跳转前先将中断向量表拷贝到ram中,发生中断时去RAM中寻中断向量表入口地址,这一块RAM不可给变量定义或申请用,只给中断向量表用。HT6025没有BOOT1与BOOT0引脚,通过软件映射的办法,当App程序发生中断时,在flash的0x08处寻到boot程序的中断入口地址,然后在boot程序内做一个跳转操作,在boot中断函数内跳转到主程序内运行:以TIM3中断为例:BOOT中断服务函数内做以下操作:
void TIMER_3_IRQHandler()
{((void (*)(void))(*((uint32_t*)(FLASH_OFFSET+4*34))))();
}
 其他中断服务函数处理方法类似。

问题2:BOOT程序内使用中断,主程序的处理

 在BOOT程序内使用TIM2中断,主程序内未使用,则TIM2的中断服务函数写在BOOT,不需要进行跳转操作,发现boot使能TIM2中断后,主程序进入HardFault,关闭bootTIM2中断则主程序正常;

解决方案:

在boot跳转主程序之前关闭中断,在主程序内将TIM2中断失能,不再使用TIM2中断。当BOOT跳转主程序后,如果BOOT内的TIM2中断仍然发生,执
行BOOT的tim2中断函数后无法跳回主程序,导致hardfault。
 /* 关闭BOOT中的TIM2中断, 否则会引发系统异常 */HT_CMU_ClkCtrl1Config(CMU_CLKCTRL1_TMR2EN, DISABLE);HT_TMR2->TMRIE  &= ~0x0001;  NVIC_DisableIRQ(TIMER_2_IRQn);

问题3:BOOT接收到主程序的代码后写入FLASH,写入数据与程序文件数据不对应;

BOOT程序内通过规约接收主程序的数据,接收到侯将主程序的代码数据写入flash,发现写入flash后的数与接收到的数据流不一致,对比发现flash只
能从1变为0,而不能从0变为1,例如flash数据内原来是0x0C(二进制1100),可以变成0x08(二进制1000),而不能变成0x0f;

解决方案:

BOOT程序在写入flash之前执行一遍擦除操作;
/* 擦除100K数据 */
for (dw = 0; dw < 100; dw++)HT_Flash_PageErase(FLASH_ADDR + (0x400 * dw));

问题4:icf文件内指定0xFC0处为_password_start_,在BOOT和APP的icf文件处都指定了这个位置,而APP程序的起始地址为0x3000,已跨过该位置,引起异常;

引起的异常包括在IAR仿真环境下先仿真BOOT再仿真APP与先仿真APP再仿真BOOT,这两种仿真顺序写入flash内部数据不一致,而逻辑上应该是一
致的,并且BOOT写flash的时候会改写此处位置,导致无法正常在线仿真,通过BOOT写一遍flash就不能仿真了,dataSheet中关于此部分数据的描述如下:

解决方案:

仅在BOOT的icf文件内指定__ICFEDIT_password_start__ 位置,在主程序的icf文件中取消此处定义;

国产芯片还有很大的进步空间。

Cortex-M0核芯片bootloader调试过程相关推荐

  1. XIlinx MIG 控制DDR3 SO-DIMM内存条(三):MIG IP核仿真与调试过程

    之前写这个系列的时候忘记上传了,刚好五一补一下. 文章目录 1 MIG IP核的接口 1.1 AXI4 slave 接口 1.2 Upsizing 1.3 User Interface 1.3.1 C ...

  2. 英飞凌tle985x芯片简介--集成了Arm®Cortex®M0的H桥驱动芯片

    TLE985X解决方案的简介 Infineon`s integrated motor driver optimizes the target applications by offering cost ...

  3. 基于ARM Cortex M0 核心的低功耗蓝牙BLE芯片

    MS1793S 是一款基于ARM Cortex M0 核心的低功耗蓝牙芯片,射频采用2.4GHz ISM 频段的频率,2MHz 信道间隔,符合蓝牙规范.MS1793S使用高性能的ARM®Cortex® ...

  4. 新唐ARM®Cortex™-M0特点总结

    ARM®CortexTM-M0特点: 主频50mhz主频,0.9DMIPS/MHz(相当于8位和16位产品的2-4倍) 小的处理内核,系统和存储器,可以降低器件成本 完善的电源管理(睡眠,深度睡眠和深 ...

  5. 基于安路FPGA的Cortex M0移植【FPGA】

    基于安路FPGA的Cortex M0移植 这其实是今年上半年参加集创赛安路科技杯时候做的内容,当时忙着考研复习大概做了个框架参赛,没想到还混到一个分赛区二等奖加一次公费旅游,现在保研后闲着写点博客记录 ...

  6. 基于瑞萨RH850的BootLoader调试问题记录

    最近要基于瑞萨的RH850开发BootLoader,调试过程遇到了一些问题,在这里记录一下. 1 Flash擦写问题 1.1 Flash介绍 Flash分为DFlash和CFlash DFlash一般 ...

  7. hardfault常见原因_XMC实验分享之四十八: Cortex M0的Hard Fault发生原因

    凡是在Cortex M系列内核上写过程序的程序员, 没有不知道Hard Fault的. 大多数程序出现问题的表现就是进入Hard Fault. 但是进入Hard Fault的原因是甚么, 为了查明这个 ...

  8. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  9. 最新瑞芯微四核芯片RK3288开源开发板

    RK3288一体机开发主板,采用瑞芯微四核芯片RK3288方案,主频高达1.8GHz.支持常用外接设备,接口丰富.性能稳定.支持多路显示接口:支持双 mipi.LVDS.HDMI.EDP.多种显示输出 ...

最新文章

  1. c语言计算字符串的函数是什么,字符函数
  2. Android:ListView、ListActivity、 setListAdapter
  3. Py之any函数【转载】
  4. Rails字符集问题
  5. Python拟合数据样本的分布
  6. 电设国赛获奖作品学习笔记
  7. shell实例第12讲:给定目录找出包含关键字的文件
  8. JSTL标准标签库的国际化标签
  9. java斗破苍穹游戏阵容,斗破苍穹手游竞技场阵容搭配解析 最强阵容你知道吗
  10. PHP的password_hash()使用实例
  11. 使用 mybatis + flying + 双向相关建模 的电商后端
  12. SQL语言之关系运算与多表操作(五)
  13. UVA11349 Symmetric Matrix【数学】
  14. java内存结构不包含堆,JVM之详细分析java内存结构模型
  15. 计算机科学导论课后感,计算机科学导论课后总结_5
  16. 超简洁又强大的幻灯片JS、CSS代码,兼容性强
  17. k均值算法——python实现
  18. 2019hdu暑假多校训练赛第五场1004 equation hdu 6627 (高中数学题)
  19. linux 查看tps命令,Linux系统一些系统查看指令
  20. 事务(Transaction)的简单理解

热门文章

  1. Navicat Premium 12.1.24
  2. Vue前端项目-用户管理-条件搜索界面
  3. 【数据分析进阶】DCIC竞赛-task2 数据可视化
  4. 鸿蒙四月几号升级啊,华为鸿蒙系统升级时间表 鸿蒙系统第二批升级时间是什么时候...
  5. 测试人员的KPI考核指标
  6. 【数学建模】主成因分析
  7. apk私钥_Android应用apk的程序签名详解
  8. 怎么使计算机桌面整洁,如何管理电脑桌面,让桌面清洁,干净,大气......
  9. pb开发的程序win10 报 sql server request resulted in a bad return code or status 的解决办法
  10. 联通数据采集交换平台BDE的配置