LPC2148像往U盘拷贝文件一样更新用户程序

发布者:快乐微笑最新更新时间:2019-10-12 来源: eefocus关键字:LPC2148  U盘  拷贝文件  更新用户程序 手机看文章 扫描二维码
随时随地手机看文章

在网上爬行了很久才找到一个介绍USBMEM_BOOTLOADER的且有源代码的论坛,用KEIL 编译后结果不能运行,后来才找到问题的根源:
//usbhw.c
void USB_Init (void) {
  PINSEL1 &= ~0xC000C000;
//PINSEL1 |=  0x40004000;  //这是原来的程序
  PINSEL1 |=  0x80004000;     /* Select USB Link, VBUS */

原来得改一下才能用到我的板子上面。

另外,原来的程序是在复位时检测P0.15是否为低来判断是进入用户程序,还是USB IAP程序,我针对我的板子改了一下,我用了两个按钮来控制它,当按下P0.21的按钮时运行用户程序,当按下P0.22的按钮时则运行USB IAP程序:

首先要在sbl_config.h中做一下修改:

#define USER_START_SECTOR 2   //用户程序起始扇区
#define MAX_USER_SECTOR 26    //最大扇区    LPC2146是 14,LPC2148是26

#define ISP_ENTRY_GPIO_REG 0xE0028000                  /* Port */
#define ISP_ENTRY_PIN21            21          /* User Code Pin  */ //这里原来是 15
#define ISP_ENTRY_PIN22            22          /* USB IAP Pin  */  //这个是增加的

然后把sbl_iap.c里面的相关内容修改一下:

void check_isp_entry_pin(void)
{
while(1)
  {
    if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<        {
            execute_user_code(); break;
        }
        if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<        {
         break;   // Enter ISP mode
        }
  }
}

现在就可以来实验一下了:
ourdev_433852.JPG 
usbmem程序的设置 


boot程序按照这个设置编译程序,要输出HEX文件,然后试用ISP工具将其下载到LPC2148中。


现在按一下复位按钮,按K1(P0.21)没有反应,因为现在还没有用户程序;按一下K2(P0.22),指示灯亮了,此时电脑会显示发现了新硬件:
ourdev_433853.JPG 
电脑中出现了一个可移动磁盘 
打开这个磁盘,会发现里面有一个文件是492K,
ourdev_433854.JPG 
得把这个文件删除掉才能拷贝入你自己的程序 
然后再编译用户程序,要把起始位置修改为0x2000;同时要输出BIN文件:(在user  run  写入fromelf --bin .FlashBlinky.axf -o .FlashBlinky.bin)把得到的BIN文件拷贝入空白的磁盘:
ourdev_433855.JPG 
拷入用户程序 
按一下复位键,再按一下K1,就开始运行流水灯程序了。

单片机源程序如下:

  1. /*----------------------------------------------------------------------------

  2. *      U S B  -  K e r n e l

  3. *----------------------------------------------------------------------------

  4. *      Name:    USBUSER.C

  5. *      Purpose: USB Custom User Module

  6. *      Version: V1.10

  7. *----------------------------------------------------------------------------

  8. *      This software is supplied "AS IS" without any warranties, express,

  9. *      implied or statutory, including but not limited to the implied

  10. *      warranties of fitness for purpose, satisfactory quality and

  11. *      noninfringement. Keil extends you a royalty-free right to reproduce

  12. *      and distribute executable files created using this software for use

  13. *      on Philips LPC2xxx microcontroller devices only. Nothing else gives

  14. *      you the right to use this software.

  15. *

  16. *      Copyright (c) 2005-2006 Keil Software.

  17. *---------------------------------------------------------------------------*/


  18. #include                         /* LPC214x definitions */


  19. #include "type.h"


  20. #include "usb.h"

  21. #include "usbcfg.h"

  22. #include "usbhw.h"

  23. #include "usbcore.h"

  24. #include "usbuser.h"

  25. #include "mscuser.h"


  26. #include "memory.h"



  27. /*

  28. *  USB Power Event Callback

  29. *   Called automatically on USB Power Event

  30. *    Parameter:       power: On(TRUE)/Off(FALSE)

  31. */


  32. #if USB_POWER_EVENT

  33. void USB_Power_Event (BOOL  power) {

  34. }

  35. #endif



  36. /*

  37. *  USB Reset Event Callback

  38. *   Called automatically on USB Reset Event

  39. */


  40. #if USB_RESET_EVENT

  41. void USB_Reset_Event (void) {

  42.   USB_ResetCore();

  43.   IOCLR1 = LED_CFG;                         /* Turn Off Cfg LED */

  44. }

  45. #endif



  46. /*

  47. *  USB Suspend Event Callback

  48. *   Called automatically on USB Suspend Event

  49. */


  50. #if USB_SUSPEND_EVENT

  51. void USB_Suspend_Event (void) {

  52.   IOSET1 = LED_SUSP;                        /* Turn On Suspend LED */

  53. }

  54. #endif



  55. /*

  56. *  USB Resume Event Callback

  57. *   Called automatically on USB Resume Event

  58. */


  59. #if USB_RESUME_EVENT

  60. void USB_Resume_Event (void) {

  61.   IOCLR1 = LED_SUSP;                        /* Turn Off Suspend LED */

  62. }

  63. #endif



  64. /*

  65. *  USB Remote Wakeup Event Callback

  66. *   Called automatically on USB Remote Wakeup Event

  67. */


  68. #if USB_WAKEUP_EVENT

  69. void USB_WakeUp_Event (void) {

  70. }

  71. #endif



  72. /*

  73. *  USB Start of Frame Event Callback

  74. *   Called automatically on USB Start of Frame Event

  75. */


  76. #if USB_SOF_EVENT

  77. void USB_SOF_Event (void) {

  78. }

  79. #endif



  80. /*

  81. *  USB Error Event Callback

  82. *   Called automatically on USB Error Event

  83. *    Parameter:       error: Error Code

  84. */


  85. #if USB_ERROR_EVENT

  86. void USB_Error_Event (DWORD error) {

  87. }

  88. #endif



  89. /*

  90. *  USB Set Configuration Event Callback

  91. *   Called automatically on USB Set Configuration Request

  92. */


  93. #if USB_CONFIGURE_EVENT

  94. void USB_Configure_Event (void) {


  95.   if (USB_Configuration) {                  /* Check if USB is configured */

  96.     IOSET1 = LED_CFG;                       /* Turn On Cfg LED */

  97.   } else {

  98.     IOCLR1 = LED_CFG;                       /* Turn Off Cfg LED */

  99.   }

  100. }

  101. #endif



  102. /*

  103. *  USB Set Interface Event Callback

  104. *   Called automatically on USB Set Interface Request

  105. */


  106. #if USB_INTERFACE_EVENT

  107. void USB_Interface_Event (void) {

  108. }

  109. #endif



  110. /*

  111. *  USB Set/Clear Feature Event Callback

  112. *   Called automatically on USB Set/Clear Feature Request

  113. */


  114. #if USB_FEATURE_EVENT

  115. void USB_Feature_Event (void) {

  116. }

  117. #endif



  118. #define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)


  119. /* USB Endpoint Events Callback Pointers */

  120. void (* const USB_P_EP[16]) (DWORD event) = {

  121.   P_EP(0),

  122.   P_EP(1),

  123.   P_EP(2),

  124.   P_EP(3),

  125.   P_EP(4),

  126.   P_EP(5),

  127.   P_EP(6),

  128.   P_EP(7),

  129.   P_EP(8),

  130.   P_EP(9),

  131.   P_EP(10),

  132.   P_EP(11),

  133.   P_EP(12),

  134.   P_EP(13),

  135.   P_EP(14),

  136.   P_EP(15),

  137. };



  138. /*

  139. *  USB Endpoint 1 Event Callback

  140. *   Called automatically on USB Endpoint 1 Event

  141. *    Parameter:       event

  142. */


  143. void USB_EndPoint1 (DWORD event) {

  144. }



  145. /*

  146. *  USB Endpoint 2 Event Callback

  147. *   Called automatically on USB Endpoint 2 Event

  148. *    Parameter:       event

  149. */


  150. void USB_EndPoint2 (DWORD event) {


  151.   switch (event) {

  152.     case USB_EVT_OUT:

  153.       MSC_BulkOut();

  154.       break;

  155.     case USB_EVT_IN:

  156.       MSC_BulkIn();

  157.       break;

  158.   }

  159. }



  160. /*

  161. *  USB Endpoint 3 Event Callback

  162. *   Called automatically on USB Endpoint 3 Event

  163. *    Parameter:       event

  164. */


  165. void USB_EndPoint3 (DWORD event) {

  166. }



  167. /*

  168. *  USB Endpoint 4 Event Callback

  169. *   Called automatically on USB Endpoint 4 Event

  170. *    Parameter:       event

  171. */


  172. void USB_EndPoint4 (DWORD event) {

  173. }



  174. /*

  175. *  USB Endpoint 5 Event Callback

  176. *   Called automatically on USB Endpoint 5 Event

  177. *    Parameter:       event

  178. */


  179. void USB_EndPoint5 (DWORD event) {

  180. }



  181. /*

  182. *  USB Endpoint 6 Event Callback

  183. *   Called automatically on USB Endpoint 6 Event

  184. *    Parameter:       event

  185. */


  186. void USB_EndPoint6 (DWORD event) {

  187. }



  188. /*

  189. *  USB Endpoint 7 Event Callback

  190. *   Called automatically on USB Endpoint 7 Event

  191. *    Parameter:       event

  192. */


  193. void USB_EndPoint7 (DWORD event) {

  194. }



  195. /*

  196. *  USB Endpoint 8 Event Callback

  197. *   Called automatically on USB Endpoint 8 Event

  198. *    Parameter:       event

  199. */


  200. void USB_EndPoint8 (DWORD event) {

  201. }



  202. /*

  203. *  USB Endpoint 9 Event Callback

  204. *   Called automatically on USB Endpoint 9 Event

  205. *    Parameter:       event

  206. */


  207. void USB_EndPoint9 (DWORD event) {

  208. }



  209. /*

  210. *  USB Endpoint 10 Event Callback

  211. *   Called automatically on USB Endpoint 10 Event

  212. *    Parameter:       event

  213. */


  214. void USB_EndPoint10 (DWORD event) {

  215. }



  216. /*

  217. *  USB Endpoint 11 Event Callback

  218. *   Called automatically on USB Endpoint 11 Event

  219. *    Parameter:       event

  220. */


  221. void USB_EndPoint11 (DWORD event) {

  222. }



  223. /*

  224. *  USB Endpoint 12 Event Callback

  225. *   Called automatically on USB Endpoint 12 Event

  226. ……………………


  227. …………限于本文篇幅 余下代码请从51黑下载附件…………



0.png 
关键字:LPC2148  U盘  拷贝文件  更新用户程序 引用地址:LPC2148像往U盘拷贝文件一样更新用户程序

上一篇:LPC2000系列Proteus仿真+代码 菜鸟的ARM学习笔记
下一篇:LPC2000系列ARM芯片的电子琴的设计

推荐阅读最新更新时间:2024-10-31 21:02

arm力天电子 lpc2148流水灯驱动程序详解
一个破流水灯程序看了两天了,void WriteByte(unsigned char data)这部分还是没看懂,力天电子上面介绍说这部分三端口的数据输入,选出8位的串行数据。 选择16,17,18,19四个控制位,主要跟电路图的连接有关,4块74HC595,组成32位(如图所示),从下往上依次是0~31为,图中写反了。因此到D13对应的引脚应该是16,D12对应的是17,D11对应的是18,D10对应的是19. 当16,17,18,19分别为低电平时二极管才能够导通发光。高电平时熄灭 1#include NXP/iolpc2148.h 2#define SCLK 0x01 24 //指定P1.24管脚,通过
[单片机]
arm力天电子 <font color='red'>lpc2148</font>流水灯驱动<font color='red'>程序</font>详解
STM32 USB NAND Flash模拟U盘无法格式化问题的解决
前几天,一直在寻找NAND Flash模拟U盘程序无法格式化的问题。在中秋月圆之夜,还苦逼地在实验室调代码,也许是杭州大圆月的原因,今晚感觉整人特别亢奋,效率也特别高,灵感也多。终于,在不懈的努力下,找到代码中的害群之马,把无法格式的问题解决掉了。下面就来说说。 这几天一直在想问题出在哪里,不知道自己的代码跟官方的例程对照了多少次,把不一样的地方全都改了一遍,最终未果。今晚思路特别清晰,于是在想到格式化实际上就是向存储器写数据而已,而设计到写数据部分的代码就只在mass_mal.c、memory.c以及存储器的驱动文件。于是反复检查这几个文件,终于发现一点端倪了,问题出在memroy.c这个文件里。 memory.c这个文件只有两
[单片机]
国外用户反应已拿到Lion系统恢复U盘
    据外国网站9to5 Mac报导,日前该网站的部分读者反应已经拿到Lion的恢复U盘,并在一台从Snow Leopard升级到Lion的MacBook Air上面成功试用。   这些读者透露,虽然这款Lion系统恢复U盘售价为69美元,但是苹果会为某些特殊的Mac用户免费提供。不过目前尚未有人出来提供这个“特殊”的具体含义。   另外,这些爆料者还透露,该U盘的大小为4GB。因此有媒体开玩笑说,与其花69美元到这么一个东西上面,还不如去买一个8G大小的金士顿U盘,仅需要8美元,最后再把恢复程序安装进去就完成了。   你怎么看呢?  
[手机便携]
STM32F10X USB-OTG 枚举U盘失败
使用了USB驱动库版本v1.0.0 (2010-11-29); 使用固件库版本v3.6.1 (2012-3-5); 问题描述: 部分品牌的U盘插入后, 在USB枚举阶段进入无限循环等待状态; 即无法识别U盘; JLink连接主板, Debug状态运行程序, 可正常识别; 独立运行MCU上程序会出现上述现象; 解决过程: 通过跟踪USB驱动程序在枚举前后的代码调用, 偶然发现, 可通过适当加入一些延时, 即可解决问题. 问题分析: 原驱动程序在发送USB指令时, 可能未严格等待BUSY状态为false, 因此在某些情况下发生指令发送过快, 从而造成接收端丢失指令, 而令通讯过程无法正常进行下去.
[单片机]
USB118a U盘读写51汇编测试程序
/************************************************************************************************ * * U盘文件读写模块 以字节为单位进行U盘文件读写。 * MCS-51 单片机 汇编示例程序 * 硬件连接方式: 4线制串口(电源,地,输入,输出) * *************************************************************************************************/ /*-------------------------------- 初始化
[单片机]
用ARM7-LPC2148连接7段显示器的教程
显示是任何嵌入式系统应用程序中非常重要的一部分,因为它可以帮助用户了解系统的状态,并显示系统生成的输出或任何警告消息。电子产品中使用的显示器类型很多,如7段显示器,LCD显示器,TFT触摸屏显示器,LED显示器等。 今天在本教程中,我们将用ARM7-LPC2148连接7段显示器。在详细介绍之前,我们将了解如何控制7段模块以显示任意数量的字符。 7段显示器 7段显示是显示数字和字符的最简单的显示单元之一。它通常用于显示数字,并且比点阵显示具有更亮的照明和更简单的结构。由于照明更亮,因此可以从比LCD更大的距离观看输出。如上图所示的7段显示器,它由8个LED组成,每个LED用于照亮单元的一个段,第8个LED用于照亮7段显示
[单片机]
用ARM7-LPC2148连接7段显示器的教程
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved