tpgf 发表于 2021-12-27 12:06

利用SeekFree的核心板调试MM32F3277的ISP功能

利用自制的实验电路板测试MM32的ISP功能,结果首次进入ISP功能受到挫折。根据MindMotion SuYong的建议,可以首先使用现成的MM32F3277开否决(来自于SeekFree的开发板)进行促成为好。他自己测试过在该板上可以实现ISP功能。



▲ 图1.1 来自于SeekFree的核心板

一、进入ISP模式
  通过核心板上的BOOT0按钮以及RST按钮,可以将MM32F3277设置进入ISP功能,通过万用表测量UART1的TXD(PA9)输出为高电平。显示应该是进入了ISP模式。

1、测试握手命令
  设置波特率为9600,根据 MM32 ISP 协议 测试握手信息。

(1)发送程序
int MM32SendCommand(unsigned char * pucBuffer, int nLength, int nReceiveLength) {
    unsigned char ucSendBuffer;

    ucSendBuffer = 0x50;
    int nCmdLength = nLength + 4;
    ucSendBuffer = (unsigned char)(nCmdLength / 0x100);
    ucSendBuffer = (unsigned char)(nCmdLength % 0x100);

    int i;
    for(i = 0; i < nLength; i ++)
      ucSendBuffer = *(pucBuffer + i);

    unsigned char ucCheck = 0x0;
    for(i = 0; i < nCmdLength - 1; i ++)
      ucCheck += ucSendBuffer;

    ucSendBuffer = ucCheck;

    ClearPort(PORT1);
    SendCharDim(ucSendBuffer, nCmdLength, PORT1);

    for(i = 0; i < nReceiveLength; i ++) {
      unsigned char c;
      if(ReceCharL(&c, PORT1, 100) != 0) break;
      *(pucBuffer + i) = c;
    }

    return i;
}

(2)接收到信息
>> Open COM1, baud : 9600
Return:9
53 00 09 00 55 00 00 00 b1


 注意到,这个返回与ISP手册中给出返回信息并不相符。2、波特率设置▲ 图1.1.1 设置协议


>> Open COM1, baud : 9600
Return:9
53 00 09 00 55 00 00 00 b1
Return:12
53 00 0c 20 56 33 38 31 03 c0 00 34


问题: 设置了波特率之后,但修改上位机的波特率,并无法与下位机进行通信。这说明下位机并没有能够完成波特率的更新。3、烧写程序(1)实现代码
int MM32SendData(unsigned char * pucData, int nLength, int nAllData, int nDataID) {
    unsigned char ucBuffer;

    ucBuffer = 0x01;

    ucBuffer = (unsigned char)(nAllData >> 24);
    ucBuffer = (unsigned char)(nAllData >> 16);
    ucBuffer = (unsigned char)(nAllData >> 8);
    ucBuffer = (unsigned char)(nAllData);

    ucBuffer = (unsigned char)(nDataID>> 24);
    ucBuffer = (unsigned char)(nDataID >> 16);
    ucBuffer = (unsigned char)(nDataID >> 8);
    ucBuffer = (unsigned char)(nDataID);

    int i;
    for(i = 0; i < 256; i ++) {
      unsigned char c;
      if(i < nLength) c = *(pucData + i);
      else c = 0xff;
      ucBuffer = c;
    }

    int nReturn = MM32SendCommand(ucBuffer, 0x109, 9);

    char szString;
    sprintf(szString, "Return:%d\r\n", nReturn);

    char szTemp;
    for(i = 0; i < nReturn; i ++) {
      sprintf(szTemp, "%02x ", ucBuffer);
      strcat(szString, szTemp);
    }

    MainForm->ShowInfor(szString);

    return 0;
}


(2)程序返回
Return:9
53 00 09 00 55 00 00 10 c1
Return:9
53 00 09 01 00 00 00 01 5e
Return:9
53 00 09 01 00 00 00 02 5f
Return:9
53 00 09 01 00 00 00 03 60
Return:9
53 00 09 01 00 00 00 04 61

通过这种方式写入0x100数据,发现并没有能够使得单片机内部的程序发生改变。依然具有可以执行的程序在里面。



七毛钱 发表于 2021-12-27 14:35

照片违规
页: [1]
查看完整版本: 利用SeekFree的核心板调试MM32F3277的ISP功能