利用SeekFree的核心板调试MM32F3277的ISP功能
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用SeekFree的核心板调试MM32F3277的ISP功能相关的知识,希望对你有一定的参考价值。
简 介: 最终,还是没有能够调通ISP的功能。问题出在哪儿?现在还不得而知。
关键词
: MM32,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 MicroPython 实验板设计和软件测试
测试逐飞的MM32F3277 MicroPython开发板的基本功能
设计带有SD卡的 MM32F3277 MicroPython 实验板