打印
[Kinetis]

飞思卡尔kinetis L系列芯片之debug

[复制链接]
844|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
powerful1|  楼主 | 2015-2-7 23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Kinetis L是飞思卡尔32位微控制器/单片机,基于ARM® Cortex®-M0+内核,集成了丰富的功能和特性,具有出类拔萃的低功耗性能和扩展性。


飞思卡尔kinetis L系列芯片仅支持Serial Wire Debug(SWD)调试端口,支持2个断点和2个数据监测点;SWD端口包括SWD_CLK和SWD_DIO,SWD_CLK为串行线时钟,内部上拉,SWD_DIO为调试数据输入/输出,内部上拉。
通过ARM Debug Access Port(DAP),调试器可以访问控制单元和以及状态寄存器。这些寄存器也包含了一些额外用于控制低功耗模式恢复以及正常运行控制的寄存器位。MDM-DP可以作为DAP1访问,它包含了状态寄存器、控制寄存器以及ID标识寄存器。
地址        寄存器        描述
0x0100_0000          Status         MDM-AP状态寄存器
0x0100_0004          Control         MDM-AP 控制寄存器
0x0100_00FC          IDR        只读ID标识寄存器,数值为 0x001C_0020 值得注意的是,DAP控制与状态寄存器并没有包含在系统存储器映射中,只能由DAP通过SWD访问。

1.MDM-AP control寄存器
位        名称        在security模式下是否可用        描述
0        flash mass erase in progress        可用        设置该位导致flash全部擦除,擦除完成自动清除此位
1        debug disable        不可用        设置该位来禁用debug,清除该位来允许debug。
2        debug request        不可用        设置该位来强制core停止
3        system reset request        可用        设置该位来强制系统复位
4        core hold reset        不可用        在复位末端保持cpu
5        VLLSx debug request        不可用        设置该位后,系统从VLLSx唤醒后,可以将core保持在复位中
6        VLLSx debug acknowledge        不可用        设置该位可以释放从VLLSx中唤醒的保持的core
7        LLS,VLLSx status acknowledge        不可用        设置该位来告知DAP LLS和VLLS状态寄存器已经被读取
8,31        reserved        不可用
2.MDM-AP status寄存器
位        名称        描述
0        flash mass erase acknowledge        当mass erase开始时,该位被置位
1        flash ready        表明flash已经被初始化
2        system security        表明系统处于security状态
3        system reset        表明系统复位状态,0系统正在复位
4        reserved
5        mass erase enable        表明MCU是否可以mass erase, 1表示可以
6        backdoor access key enable        表明MCU backdoor access key是否使能,1表示使能了
7        LP enable        表明系统是否使能低功耗停止模式
8        very low power mode        表明当前运行模式为VLPx,这一位用来调节SWD_CLK速率
9        LLS mode exit        表明已经从LLS模式退出,进入LLS后,调试器会和系统失去通讯,
当系统从LLS退出时,调试器可以重新和系统通讯
10        VLLSx mode exit        表明已经从VLLSx模式退出,进入VLLSx后,调试器会和系统失去通讯,
当系统从VLLSx退出时,由于调试器模块状态丢失,所以需要重新配置后才可以通讯
11,15        reserved
16        core halted        表明core进入了调试停止模式
17        core sleepdeep        表明core进入了低功耗模式
18        core sleeping
19,31        reserved

相关帖子

沙发
powerful1|  楼主 | 2015-2-7 23:03 | 只看该作者
3.调试复位
调试系统接收到debug reset以及系统POR reset 两个复位源时会复位,debug reset即是DP 控制状态寄存器中的CDBGRSTREQ位。与此同时,调试系统也能产生系统复位,主要通过3种方式实现系统复位:写DAP控制寄存器中保持系统复位位、写NVIC应用中断和复位寄存器中SYSRESETREQ位和DAP控制寄存器中保持core位。

使用特权

评论回复
板凳
powerful1|  楼主 | 2015-2-7 23:03 | 只看该作者
4.在低功耗模式下调试
在STOP和VLPS模式下,模式控制器进入一个模拟的stop模式来继续debug:稳压器继续工作、关闭除了系统时钟FCLK的所有时钟、调试模块可以访问核心寄存器却不可以访问外设寄存器
LLS模式下,debug模块停止工作,但状态保持,一旦LLS退出,debug可以继续工作,不需要重新配置;而在VLLSx模式下,debug模块被关闭,所有状态丢失,在退出VLLSx模式时,需要重新配置才能使用。

使用特权

评论回复
地板
powerful1|  楼主 | 2015-2-7 23:03 | 只看该作者
5.安全模式和debug
在security模式下,调试口只拥有受限的访问能力来防止数据修改;调试器还可以访问DP状态寄存器来决定当前设备的安全状态,对于flash操作,调试器只能执行一键擦除操作(如果FSEC MEEN使能)。

使用特权

评论回复
5
powerful1|  楼主 | 2015-2-7 23:04 | 只看该作者
6.如何破kinetis L VLLSx+FSEC(secured)+FOPT(reset disabled, nmi disabled)
情景1:使用kinetis L系列MCU进行低功耗开发不可避免的会使用VLLSx模式,这种模式会关闭debug模块,导致debugger无法连接设备;
情景2:由于kinetis L MCU所有安全选项都存储在0x400-0x40F这段flash中,所以这段flash也就成为了重点保护对象,修改要格外小心;但是还是会有时不经意擦掉这段内容,比如用烧写工具烧写一个该段为全0的image,此时禁用了reset pin和NMI pin,并开启了security,只留下了mass erase。

对于情景1,没有任何问题,连接调试器后,调试器可以通过resert pin将芯片复位,连接上设备,进行一下一系列操作
对于情景2,可以通过调试器连接上设备,然后调用unlock kinetis(jlink)即可导致flash mass erase,解决战斗

问题来了。。。。

如果情景1和情景2同时发生怎么办?

这种情况发生的概率不小,如果进行低功耗应用开发,应用大部分时间在VLLSx里,只有很短很短的时间(短于人的反应时间)在run模式下,并不慎发生了情景2,此时因多数时间出在VLLSx下,调试想通过reset复位设备却发现reset被禁用了, 怎么办?

经过分析,只能想办法把应用hold在run模式下,即让进入低功耗模式条件不满足(比如短接一些端口神马的),然后通过调试器连接上去,相当于情景2,mass erase;大功告成。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

430

帖子

4

粉丝