当前位置: 首页 > news >正文

【JTAG、SBW、BSL】MSP430的BSL

对于MSP430来说,无论仿真还是烧写程序一般可以通过:JTAG、SBW、BSL接口进行。JTAG、SBW接口可以用于仿真接口,BSL接口不能用于仿真。而编程器则三种接口都支持。所以并不能说JTAG只支持仿真不支持编程,这是概念错误,JTAG仅仅是一种接口协议而已。

下面简单描述一下三种接口的区别:


1、JTAG是边界扫描技术,其在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430的内部数据地址总线上,所以可以用JTAG访问430内部的所有资源,包括对FLASH的读写操作。所以可以用于对MSP430的仿真及编程。主要连接线有TMS、TCK、TDI、TDO、RST、TEST。

2、SBW是SPY-BI-WIRE,可以简称两线制JTAG,主要用SBWTCK(连接到JTAG仿真器的7脚TCK)与SBWTDIO(连接到JTAG仿真器的1脚TDO/TDI),该接口主要用于小于28脚的2系列的430单片机,因为28脚以内的2系列单片机的JTAG接口一般与IO口复用,为了给用户预留更多的IO口,才推出了SBW接口。同样SBW接口可以用于仿真器及编程器。


3、BSL是TI在对MSP430出厂时预先固化到MCU内部的一段代码,有点类似于DSP的bootloader,但又与bootloader有明显的区别,BSL只能用于对MCU内部的FLASH访问,不能对其他的资源访问,所以只能用作编程器接口。BSL通过UART协议与编程器连接通信。编程器可以发送不同的通信命令来对MCU的存储器做不同的操作。BSL的启动有些特殊,一般430复位启动时PC指针指向FFFE复位向量,但可以通过特殊的启动方式可以使MCU在启动时让PC指向BSL内部固化的程序。启动方式一般是由RST引脚与TEST(或TCK)引脚做一个稍复杂的启动逻辑后产生。BSL启动后,就可以对MCU进行访问了。
一般的MCU都有代码加密功能,430是如何实现的呢?外部对430内部的代码读写只能通过上述的三种方式,所以又引入了熔丝位,熔丝位只存在于JTAG、SBW接口逻辑内。BSL内部没有熔丝。当熔丝烧断时(物理破坏,且不可恢复)JTAG与SBW的访问将被禁止,此时只有BSL可以访问。而通过BSL对MCU的访问是需要32个字节的密码,该密码就是用户代码的中断向量表。所以430的加密系统到目前为止尚无被解密的报告。
仿真器的型号一般有UIF(USB接口,支持JTAG、SBW)、PIF(并口,只支持JTAG)、EZ430(USB接口的,只支持SBW模式);专业编程器有GANG430(串口、一拖8个,支持JTAG、SBW,不支持BSL);多功能编程器(JTAG、SBW、BSL)。这些编程器都可以做离线烧写,即脱离计算机来对目标板烧写。也可以用仿真器配专业的软件来做编程器,这类软件有MSPFET、FET-PRO430等

MSP430的BSL

BSL的意义:

1、不用仿真器、编程器,就可以实现内存修改(可以应用为参数修改),程序下载。 能加速程序成熟后的批量生产。方便在板修改程序参数。

2、JATG熔丝烧断后,访问内存的唯一方法。

MSP430启动加载程序(Bootstrap Loader,以下简称BSL)允许用户通过标准的RS-232串行口访问CPU内存,包括Flash和Ram,这项功能为嵌入式应用提供了方便的维护方式。

 要使MSP430单片机进入BSL,需要给特定引脚上一个特定时序,接到这个特定时序后,CPU程序指针(PC)指向内存中的0C00H地址处,这是一段1K大小的ROM区(0C00H-1000H),BSL就在这里。

    通过BSL对CPU的操作包括:读内存区、写内存区、flash全部擦除,flash 分段擦除。除flash分段擦除外,其它功能需要先校验密码,密码是存于地址0FFE0H~0FFFFH段的32字节的内容。

原文地址:http://blog.csdn.net/fuzadebobo/article/details/7014685

相关文章:

  • 【stack pointer 】The stack pointer for stack is outside the stack range
  • 【浮点数转16进制】小数(单精度浮点数)转16进制字节
  • 【VISIO绘图】VISIO绘图 学习笔记
  • 【FLASH 操作】FLASH 读写等操作 学习
  • 【ARM9】ARM 2440 学习笔记
  • 【学习经验】学习经验总结
  • 【C到C++】C到C++ 学习笔记 【概念】
  • 【IAR外部编辑器】IAR 使用外部编辑器(VS2005/2008/2010等)的设置
  • 【捕获比较模式】msp430定时器比较捕获理解
  • 【C/C++】C语言signal信号|软中断信号|程序捕获Ctrl+C 信号
  • 【setjmp和longjmp 】 C语言的非局部跳转:setjmp和longjmp(跨函数长跳转)
  • 【C到C++】关于 Complex (复数类)
  • 【C到C++】C++中的抛出异常throw 和异常处理try- catch
  • 【托管引用】C++/CLI中的引用类型
  • 【C到C++】简单数据库
  • 3.7、@ResponseBody 和 @RestController
  • co.js - 让异步代码同步化
  • Docker入门(二) - Dockerfile
  • JDK 6和JDK 7中的substring()方法
  • PHP面试之三:MySQL数据库
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • supervisor 永不挂掉的进程 安装以及使用
  • Vultr 教程目录
  • 京东美团研发面经
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端攻城师
  • 在electron中实现跨域请求,无需更改服务器端设置
  • PostgreSQL之连接数修改
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)jdk与jre的区别
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 读取 JSON格式的数据
  • .NET 服务 ServiceController
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET基础篇——反射的奥妙
  • @Mapper作用
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [2669]2-2 Time类的定义
  • [Android] 修改设备访问权限
  • [CF482B]Interesting Array
  • [echarts] y轴不显示0
  • [emacs] CUA的矩形块操作很给力啊
  • [EMWIN]FRAMEWIN 与 WINDOW 的使用注意
  • [Foreman]解决Unable to find internal system admin account
  • [GYCTF2020]Ez_Express
  • [IE编程] IE 是如何决定Accept-Language 属性的
  • [IMX6DL] CPU频率调节模式以及降频方法
  • [linux]--关于进程概念(上)
  • [MySQL]数据库基础
  • [MZ test.16]P1 评测
  • [Oh My C++ Diary]operator++()和operator++(int)的区别