现场升级方案:LPC1788采用U盘方式进行程序IAP升级功能的实现

现场升级方案:LPC1788采用U盘方式进行程序IAP升级功能的实现
闲来无事,总结一下前段时间做过的U盘升级项目。一个新手的成长之路在于善于总结,生活也是一样扯远了,我准备了两个软件环境,一个带操作系统(UCOS)的,另一个裸机版的。随后我会附上两个程序代码。U盘升级可以分为两部分代码:U盘读取bin文件和IAP功能两部分。大概说一下实现过程,具体IAP网上都玩坏了。

硬件环境:NXP 1788

软件环境:KEIL

实现过程:上面说了我准备了两个程序,就用裸机版的代码说一下实现流程。带操作系统的原理都是一样的。只是多创建几个任务而已。USB_HOST实现IAP升级,总的思路就是:复制bin文件到U盘->目标板断电,插上U盘->目标板上电,进入升级->运行升级程序。其实可以更具体,比如说设置升级标志或者按键。

拿到一个程序先从main开始,直接贴代码,说一大堆废话有什么用。

 

int main()
{
  int32_t  rc;
 uint32_t  numBlks,blkSize;
 uint8_t inquiryResult[INQUIRY_LENGTH];

   SystemInit();              

   UART_Init(57600);         
   Host_Init();              
    rc =Host_EnumDev();      
    if (rc ==OK) {
  
       rc = MS_Init( &blkSize, &numBlks, inquiryResult );
       if (rc == OK) {
           rc = FAT_Init();  
           if (rc == OK) {
               Bin_Read();   
           } else {
               return (0);
           }
       } else {
           return (0);
       }
    } else{       
       return (0);
    }
   while(1);
}

下面分模块说一下, 前面的硬件初始化函数很简单,USB设备枚举和FAT文件系统NXP官网上都有,只需改硬件接口,Host_Init函数如下:

void  Host_Init(void)
{
 uint32_t HostBaseAddr;

   LPC_SC->PCONP   |=0x80000000;
   LPC_USB->OTGClkCtrl   =0x00000019; 
    while((LPC_USB->OTGClkSt & 0x00000019) != 0x19);
 
 LPC_USB->StCtrl =0x1; 

  LPC_IOCON->P0_29 &= ~(0x07UL << 0);
   LPC_IOCON->P0_30 &= ~(0x07UL << 0);
   LPC_IOCON->P1_28 &= ~(0x07UL << 0);
   LPC_IOCON->P1_29 &= ~(0x07UL << 0);

   LPC_IOCON->P0_29 |= 0x01UL <<0;                                   
   LPC_IOCON->P0_30 |= 0x01UL <<0;                                   
   LPC_IOCON->P1_28 |= 0x01UL <<0;                                   
   LPC_IOCON->P1_29 |= 0x01UL <<0;                                   //  P1.29 --US

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LPC2138是一款基于ARM处理器的单片机,具有丰富的外设和强大的处理能力。IAP(In-Application Programming)是一种在嵌入式系统中通过软件来对单片机的程序进行更新的方式升级上位机是指使用上位机软件来完成对LPC2138单片机中的程序进行升级。 要实现LPC2138的IAP升级上位机,首先需要一个上位机软件。该软件可以通过串口、USB等通信方式与LPC2138单片机进行连接,将升级文件发送给单片机。上位机软件需要具备以下功能: 1. 文件选择:上位机软件应该能够选择要进行升级的文件,该文件应该是固件二进制文件的形式,例如bin文件。 2. 通信接口选择:上位机软件需要选择与LPC2138单片机进行通信的接口,例如串口或USB。根据选择的接口,上位机软件应配置相应的通信参数。 3. 通信协议:上位机软件和LPC2138单片机之间需要通过某种通信协议进行数据交互。常用的协议有XMODEM、YMODEM、ZMODEM等。上位机软件需要支持相应的协议,并能够解析接收到的数据。 4. 升级过程显示:上位机软件应该提供一个界面,实时显示升级的进度和状态。例如,显示当前正在发送的数据包序号、发送进度百分比等。 5. 错误处理:上位机软件需要能够检测到通信错误,并及时显示错误信息。例如,通信超时、数据校验失败等。 当上位机软件和LPC2138单片机连接成功后,上位机软件会将固件二进制文件按照预定的通信协议逐包发送给单片机,并由单片机接收和存储。单片机接收完整个升级文件后,将进行固件的更新,重启后即可运行新的程序。 总结而言,LPC2138 IAP升级上位机需要一个具备文件选择、通信接口选择、通信协议、升级过程显示和错误处理等功能的上位机软件来实现,通过该软件与LPC2138单片机进行通信,将固件二进制文件发送给单片机,完成对单片机程序升级。 ### 回答2: LPC2138是NXP(原飞利浦)公司生产的一种32位ARM微控制器,支持可编程内存区(IAP功能IAP(In-Application Programming)是指在目标设备上直接通过软件实现固件的升级和更新,而不需要使用外部编程器。LPC2138芯片内部集成了IAP功能,使得用户可以利用这一功能进行固件的升级。 为了实现LPC2138 IAP升级上位机,我们需要以下步骤: 首先,需要开发一个上位机软件,其中包含固件升级的相关功能。这个上位机软件可以通过串口或USB等方式与LPC2138芯片进行通信。 其次,确定固件的升级方式。LPC2138支持多种升级方式,如通过串口或USB进行固件的传输和更新。用户可以根据需要选择适合自己的升级方式。 然后,编写固件升级的相关代码。在LPC2138芯片中,内置有IAP Bootloader,用于在系统启动时检查并加载新的固件。我们需要在固件中实现相应的代码,通过IAP接口来完成固件的升级。 最后,通过上位机软件向LPC2138芯片发送固件升级的指令,并将新的固件文件传输到芯片上。LPC2138芯片会在接收到升级指令后,将固件文件存储到对应的存储器区域,并通过IAP Bootloader加载新的固件。 通过以上步骤,我们就可以实现LPC2138的IAP升级上位机。这种升级方式灵活方便,可以为用户提供固件升级的便利性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值