查看: 1488|回复: 0
打印 上一主题 下一主题

LPC2148像往U盘拷贝文件一样更新用户程序(包含源代码)

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-13 20:24:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在网上爬行了很久才找到一个介绍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<<ISP_ENTRY_PIN21)) )
        {
            execute_user_code(); break;
        }
        if(!( (*(volatile unsigned *)ISP_ENTRY_GPIO_REG) & (0x1<<ISP_ENTRY_PIN22)) )
        {
         break;   // Enter ISP mode
        }
  }
}

现在就可以来实验一下了:

usbmem程序的设置 (原文件名:USBMEM_1.JPG)
boot程序按照这个设置编译程序,要输出HEX文件,然后试用ISP工具将其下载到LPC2148中。
现在按一下复位按钮,按K1(P0.21)没有反应,因为现在还没有用户程序;按一下K2(P0.22),指示灯亮了,此时电脑会显示发现了新硬件:

电脑中出现了一个可移动磁盘 (原文件名:USBMEM_2.JPG)
打开这个磁盘,会发现里面有一个文件是492K,

得把这个文件删除掉才能拷贝入你自己的程序 (原文件名:USBMEM_3.JPG)
然后再编译用户程序,要把起始位置修改为0x2000;同时要输出BIN文件:(在user  run  写入fromelf --bin .\Flash\Blinky.axf -o .\Flash\Blinky.bin)把得到的BIN文件拷贝入空白的磁盘:

拷入用户程序 (原文件名:USBMEM_4.JPG)
按一下复位键,再按一下K1,就开始运行流水灯程序了。

点击此处下载 ourdev_433856.rar(文件大小:428K)USB IAP 程序 (原文件名:usbmem_bootloader.rar)

点击此处下载 ourdev_433857.rar(文件大小:134K)用户程序示例 (原文件名:User Code Sample Blinky.rar)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表