不知道版主在使用的是有有没有遇到我这样的问题,
我用的片子是xmega64d4,环境是AS7,使用的USARTD0,波特兰38400,熔丝位BOOTRST设置为:Boot Loader Reset,配置好串口,使用AVRUBD工具下载一个新hex,发现可以:
1.密码验证正确
2.有Waiting Flash Data打印
3.显示联机成功
跟踪到这里:
putstr(msg3); //提示等待接收文件
//进入等二环节
//密码对上了,准备接收数据
//------------------------------------------------------------------------------
//每个时隙向PC机发送一个控制字符“C”,等待控制字〈soh〉
cnt = TimeOutCntC;
signal=0;
delay_us(1000);
while(signal==0)
{
if(TC_GetOverflowFlag(&TCC0)) //T1溢出
{
ioport_set_pin_high(USARTC0_485_CONTROL_GPIO);
TC_ClearOverflowFlag(&TCC0);
WriteCom(XMODEM_RWC) ; //发送 "C"
cnt--;
if(cnt == 0) //超时
{
putstr(msg2); //提示超时
quit(); //退出 bootloader
}
}
delay_us(8000);
ioport_set_pin_low(USARTC0_485_CONTROL_GPIO);//准备接收密码
if(USART_IsRXComplete(&USART)) //收到字符?
{
get_char=USART_GetChar(&USART);
if(get_char == XMODEM_SOH) //XMODEM命令开始
{signal=1;break;}
}
}
//已经收到一个起启字符了 开始更新Application
前面密码已经对上,此时AVRUBD应该发送“XMODEM_SOH”,然后我板子应该回复“C”,但是真实的情况是:
1.AVRUBD还在发送六次“41 56 52 55 42”
2.板子回复“C”
3.AVRUBD又发送六次“41 56 52 55 42”
4.板子回复“C”
5.然后AVRUBD工具显示:
V联机成功
X重复次数太多
X升级失败
哪里有AVRUBD工具的使用说明吗?这里为什么会这样,其实只要AVRUBD发送“XMODEN_SOH”,就可以跳转到下一个while里面? |