嵌入式学习--work10 在SARM里面调试代码--使用STVP解锁
2016-11-08 14:59
323 查看
实验室有很多板子都被“不经意”的人为操作而锁住了,下载程序会出现如下图所示的情况,为了“挽救”它们,决定开始学习这一块的知识。学习的过程有参考野火的资料,以下为学习笔记。 在下载程序时出现如下错误:
把代码下载到RAM中调试有如下优点: 1、下载程序非常快 2、不改写内部FLASH的原有程序 3、对于内部FLASH被锁定的芯片,可以把解锁程序下载到 RAM上,进行解锁。 缺点: 1、存储在RAM上的程序掉电后会丢失,不能像FLASH那样保存。 2、若使用STM32的内部SRAM存储程序,程序的执行速度与在FLASH上执行速度无异,但SRAM空间小。 3、如果是外部SRAM,速度要比内部FLASH慢。
一、了解STM32的启动方式:
(1) 从地址 0x00000000 处取出栈指针 MSP 的初始值,该值就是栈顶的地址。
(2) 从地址 0x00000004 处取出程序指针 PC 的初始值,该值指向复位后应执行的第一条指令。
上述过程由内核自动设置运行环境并执行主体程序,因此它被称为自举过程。
虽然内核是固定访问 0x00000000 和 0x00000004 地址的,但实际上这两个地址可以被重映射到其它地址空间。以 STM32F103 为例,根据芯片引出的 BOOT0 及 BOOT1 引脚的电平情况,这两个地址可以被映射到内部 FLASH、内部 SRAM以及系统存储器中,具体见下图:
二、STM32启动方式之内部 SRAM 启动
类似地,当芯片上电后采样到 BOOT0 和 BOOT1 引脚均为高电平时, 0x00000000 和 0x00000004 地址被映射到内部 SRAM 的首地址 0x20000000 和 0x20000004,内核从SRAM 空间获取内容进行自举。
在实际应用中,由启动文件 starttup_stm32f10x.s 决定了 0x00000000 和 0x00000004 地址存储什么内容,链接时,由分散加载文件(sct)决定这些内容的绝对地址,即分配到内部 FLASH 还是内部 SRAM。
/[b]*****************************************************************************[/b]/
下面介绍用ST软件的方法来实现解锁,已经成功实现了。
先要下载软件STVP,安装配置如下:板子用的是STM32F411的,下载器为STLink,所以
主要是将图中的 No protection (Level 0) 修改,锁住了将会达到Level 1甚至更高,选中No protection (Level 0)后,选择下载Programming,图中菜单栏第二行有许多类似于下载的按键,选Programming (Erase选项下面的那个)
相关文章推荐
- 大数据学习笔记:编写脚本分发配置,数据分布,以及使用代码打印调试信息
- 转载 PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse
- PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- 如何在eclipse里面进行PHP代码的调试(使用集成开发环境xampp)
- Androidx学习笔记(67)--- 使用代码注册广播接收者(实现屏幕锁屏和解锁)
- PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse
- PHP学习笔记 - 在Eclipse中使用XDebug调试代码 | Using XDebug debug code in eclipse
- 个人学习代码保存:例9.在存储过程中使用cast 类型转换的实例
- SmartClient学习(二):智能客户端的安全性和VS2005调试代码
- 嵌入式开发中使用DDD进行调试
- [Silverlight学习记录]Resources-2 (使用代码访问Silverlight资源)
- 使用嵌入式Tomcat简化程序调试
- 使用嵌入式 Tomcat 简化程序调试
- 使用gdb调试共享库代码(转)
- 使用嵌入式 Tomcat 简化程序调试
- Smart Client学习笔记(5) 托管代码的增强调试功能
- 【嵌入式Linux学习七步曲之第二篇 ARM+Linux开发环境】在AT91RM9200上通过nfs调试linux程序
- 个人学习代码保存:例4.在.net程序中使用事务处理
- FastSpring学习笔记二(使用工具MyGeneration生成Model和NHibernate的代码 )