BMI的值决定了芯片的启动模式和调试配置,这个值在芯片的各个使用阶段都可能需要修改,本文详细的介绍了几种常见的修改方法。
BMI共有五种模式,总结如下:Boot Mode Index |
| ASC_BSL | UART引导模式 | SSC_BSL | SPI引导模式 | User mode HAR(SWD/SPD) | 用户模式,但是等在Bootloader程序中 | User mode debug
(SWD/SPD) | 用户模式,跳到用户程序执行 | User prodcutive Mode | 量产模式,上电后不执行Bootloader程序,直接跳到用户程序执行 |
烧录的硬件接口总结如下:
启动状态总结如下:
下文总结了五种常见的修改方法: 方法一:
通过DAVE IDE 进行修改:
在DAVE IDE中提供了窗口修改BMI值,这个在程序开发的过程中非常实用,可以点击Get BMI 获得BMI值,通过Set BMI进行设置BMI值,具体的操作如图1。
图1:DAVE IDE修改BMI值 方法二:
通过J-Link Commander进行修改,调用setbmi设置BMI值,调用getbmi获取当前BMI值,具体的操作如图2。
图2:J_Link Commander 设置BMI值 方法三:利用ROM table中的函数XMC1000_BmiInstallationReq()函数修改BMI的值,这个方便在程序中预留接口进行修改。这个函数存放的地址为0x0000 0108,可以通过下面的方法进行访问:
#define _BmiInstallationReq (0x00000108)
#define XMC1000_BmiInstallationReq (*((unsigned long (**) (unsigned short)) _BmiInstallationReq))
XMC1000_BmiInstallationReq(0xFFC0); // BMI = ASC_BSL Start-up Mode | Pins used | BMI value | ASC Bootstrap Load Mode (ASC_BSL) | P0.14/P0.15 or P1.3/P1.2 | 0xFFC0 | User Mode (Productive) |
| 0xF8C1 | User Mode (Debug) SWD0 | P0.14/P0.15 | 0xF8C3 | User Mode (Debug) SWD1 | P1.3/P1.2 | 0xFAC3 | User Mode (Debug) SPD0 | P0.14 | 0xF9C3 | User Mode (Debug) SPD1 | P1.3 | 0xFBC3 | User Mode (HAR) SWD0 | P0.14/P0.15 | 0xF8C7 | User Mode (HAR) SWD1 | P1.3/P1.2 | 0xFAC7 | User Mode (HAR) SPD0 | P0.14 | 0xF9C7 | User Mode (HAR) SPD1 | P1.3 | 0xFBC7 |
方法四:Infineon 烧录上位机Memtool 可以从ASC_BSL mode 连接芯片,连接以后可以通过Boot Mode修改BMI值。如果改成其它模式,Memtool不能再和芯片保持连接状态,除非改成ASC_BSL Mode才可以重新修改BMI值。
图3:Memtool设置BMI值 方法五:Infineon 烧录上位机XMCTM Flasher 可以从SWD mode连接芯片,进行BMI值的修改,但修改到别的模式以后需要重新设置到SWD模式才能重新连接芯片。
图4:XMCTM Flasher 设置BMI值
|