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

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用SeekFree的核心板调试MM32F3277的ISP功能相关的知识,希望对你有一定的参考价值。

简 介: 最终,还是没有能够调通ISP的功能。问题出在哪儿?现在还不得而知。

关键词 MM32ISP

ISP功能
文章目录
进入ISP模式
测试握手命令
波特率设置
烧写程序
烧写程序问题
测试总结

 

§01 ISP功能


   测试MindMotion 的 ISP功能 - 无法进入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[0x100];

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

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

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

    ucSendBuffer[nCmdLength - 1] = 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[0x1000];

    ucBuffer[0] = 0x01;

    ucBuffer[1] = (unsigned char)(nAllData >> 24);
    ucBuffer[2] = (unsigned char)(nAllData >> 16);
    ucBuffer[3] = (unsigned char)(nAllData >> 8);
    ucBuffer[4] = (unsigned char)(nAllData);

    ucBuffer[5] = (unsigned char)(nDataID>> 24);
    ucBuffer[6] = (unsigned char)(nDataID >> 16);
    ucBuffer[7] = (unsigned char)(nDataID >> 8);
    ucBuffer[8] = (unsigned char)(nDataID);

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

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

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

    char szTemp[1024];
    for(i = 0; i < nReturn; i ++) 
        sprintf(szTemp, "%02x ", ucBuffer[i]);
        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数据,发现并没有能够使得单片机内部的程序发生改变。依然具有可以执行的程序在里面。

二、烧写程序问题

  现在烧写MM32F3277的程序依然存在。 无论写入什么么,都返回相同的字节。这表明发送进入的信息并没有少些在正确的PAGE上。

 

试总结 ※


  终,还是没有能够调通ISP的功能。问题出在哪儿?现在还不得而知。


■ 相关文献链接:

● 相关图表链接:

以上是关于利用SeekFree的核心板调试MM32F3277的ISP功能的主要内容,如果未能解决你的问题,请参考以下文章

制作灵动单片机MM32F3277 测试版

MM32F3277 MicroPython 实验板设计和软件测试

测试逐飞的MM32F3277 MicroPython开发板的基本功能

设计带有SD卡的 MM32F3277 MicroPython 实验板

MindMotion MM32F3277 SoftI2C功能测试

测试MM32F3277基本模块功能