This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于USB升级

Other Parts Discussed in Thread: MSP430F5510

我们有一个项目,使用的是MSP430F5510,在应用中把USB设备在PC上模拟CDC方式实现了上位机与下位机的正常通信。现在有一个需求是做通过USB升级固件(设备的客体只有一个USB接口,一则用于充电,二则用于USB通信,所有现目前只有通过USB的方式来升级固件),我们当时遇到一个问题是USB插上开机,51脚,PUR在硬件上连接了一个电阻,所以就自动进入BSL,这个和我们设计的需求不符合,所以我们就把PUR的电阻给去掉,就能够正常进入我们的main,现在的问题是,我们5510的空间只有32K,代码已经IAR最大优化size达到了30K左右,所以之前给相关的工程师提供的重定位USB功能模块的方式,实现起来有点困难,然后再论坛里面有问了有工程师提供了一个slaa452b.pdf文档,我们按照里面所诉的方式通过软件跳转到0x1000地址BSL,由于我们使用的晶振是16M的,看了手册里面写的自动检测是2M,4M,6M,12,和24M的,所以我们通过BSL_USB_GUI.exe发现不了设备,请问5510是否可以通过上述方式(我们有上位机软件通过CDC与5510通信,发送升级命令,接收到升级命令,关闭中断软件跳转到0x1000BSL,然后通过BSL_USB_GUI.exe来实现固件升级这样可以吗),那么BSL中是把USB设备作为的HID来实现的? 望各位专家提供相关的信息,谢谢!

  • david shu,

    您好!

    “我们当时遇到一个问题是USB插上开机,51脚,PUR在硬件上连接了一个电阻,所以就自动进入BSL,这个和我们设计的需求不符合,所以我们就把PUR的电阻给去掉”

    可以加一个按键,在开机的时候一直按着这个按键,让MSP430进入USB BSL模式。

    “由于我们使用的晶振是16M的,看了手册里面写的自动检测是2M,4M,6M,12,和24M”

    如果像您描述的这样,能不能修改一下晶振呢?

  • 1. 如果采用USB做Boot程序的话,代码大概在2K左右。你可以考虑下是否在你的应用程序中增加个BOOT程序.在你的代码足够的情况下,采用自己的BOOT程序具有较高的灵活性和安全性。

    2. 调用MSP430F55XX内部固化的BOOT程序有3个途径,1) 上电复位后如果中断入口的地址为空,芯片会自动跳转到BOOT程序,2)从应用程序跳转到BOOT程序中可以通过((void (*)())0x1000)();这条代码来实现,所以你的代码中可以增加从软件进入BOOT程序的方法,3)硬件PUR,这个不多讲,你已经很清楚了。

    3. 采用第一种方法最简单,你的应用程序如果接收到更新代码的命令,可以直接擦除0xFFFF开始的中断向量表,这样重新启动后就能自动进入BSL的代码。第二种方法也类似。

    4.无论哪种方法,BSL代码如果要枚举成功,都需要2/4/6/12/24M的晶体,所以,如果你外部的晶体不是合法的晶体的话,又想用芯片内部的BSL就只能更换晶体。

    5. 我有个疑问,你第一次下载代码是通过什么途经的?是用JTAG还是USB?

  • 如果我通过软件跳转到0x1000BSL,能否通过USB来进行升级(硬件上PUR电阻不接,我们的外壳上只有密封只有一个MiniUSB接口)?

  • 软件直接跳转到0X1000BSL,即使你不用PUR也是可以的,PUR只是用来判断是否进入BSL的。

  • 各位大侠,我现在也要使用USB来下载配置和读取配置,另外还要通过USB下载应用程序。我使用的也是5510,请问你解决了吗,可否一起分享一下你的成果?谢谢

  • 楼主你好,我现在使用的5510的USB功能和你的差不多,你的上位机和下位机的CDC通信,在主机上是什么驱动。可以说说你的实现过程吗?谢谢