LPC11U34 IAP命令进入USB ISP模式

2019-03-25 20:25发布

我使用的是LPC11U34通过USB接收PC端的命令,在最开始的时候,如果MCU内没有firmware,那么,MCU会进入到默认的bootloader,即MCU枚举成一个MSC设备,然后通过将bin文件放到这个MSC设备内,来实现firmware的更新,我知道很多开发板上面都是使用一个按键在MCU复位时拉低PIO0_1以使MCU进入到bootloader从而枚举成MSC设备,但是现在我想要通过软件设置,当我通过USB接收到PC端的一个命令后(比如说接受到命令07 30 00 00 00 00 00 00 ),然后软件拉低PIO0_1,然后执行复位,但是,复位后并没有进入到bootloader即没有枚举成MSC设备,后来我发现,原因可能是MCU复位的时候,所有的IO都默认为输入高电平,这个时候我在复位之前将PIO0_1输出低电平没有意思,那么,请问各位,我要怎样做才能通过软件进入到bootloader呢?

补充:
经过查找资料,发现可以使用IAP命令强制进入到USB ISP模式,但是,将代码写好之后仍然不能进入到bootloader,代码如下:
static U32 u32BootCommand[5],u32BootResult[4];

/* IAP boot ROM location and access function */
#define IAP_ROM_LOCATION 0x1FFF1FF1UL
#define IAP_EXECUTE_CMD(a, b) ((void (*)())(IAP_ROM_LOCATION))(a, b)
#define IAP_CMD_REINVOKE_ISP 57

void msAPI_Flash_ReinvokeISP(void)
{
__disable_irq();

__set_MSP(*((uint32_t *) 0x1FFF0000));

u32BootCommand[0] = IAP_CMD_REINVOKE_ISP;
IAP_EXECUTE_CMD(u32BootCommand , u32BootResult);
__enable_irq();
}

void main(void)
{
       /* make sure USB clock is turned on before calling ISP */
       LPC_SYSCON->SYSAHBCLKCTRL |= 0x04000;
       /* make sure 32-bit Timer 1 is turned on before calling ISP */
       LPC_SYSCON->SYSAHBCLKCTRL |= 0x00400;
       /* make sure GPIO clock is turned on before calling ISP */
       LPC_SYSCON->SYSAHBCLKCTRL |= 0x00040;
       /* make sure IO configuration clock is turned on before calling ISP */
       LPC_SYSCON->SYSAHBCLKCTRL |= 0x10000;
       /* make sure AHB clock divider is 1:1 */
       LPC_SYSCON->SYSAHBCLKDIV = 1;
      /*select IRC clock source*/
       LPC_SYSCON->CLKOUTSEL = 0;
       LPC_SYSCON->CLKOUTUEN = 1;
      
       msAPI_Flash_ReinvokeISP();
}

[ 本帖最后由 cc474231890 于 2013-3-7 16:51 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。