CH32V307的U盤中bin文件的IAP程序下載后無(wú)法啟動(dòng)問題

是這樣的,我是想使用U盤通過IAP更新APP程序,我是使用例程:EXAM\IAP\USB+UARTT\CHV30x_IAP修改的程序,在程序中屏蔽了usbhs device,添加U盤的usbhs host;在全部修改后,我發(fā)現(xiàn)一旦我程序里有CH103子程序庫(kù)的讀取函數(shù),就會(huì)復(fù)位后芯片完全沒有反應(yīng)(有點(diǎn)像死機(jī),具體還不太清楚);


現(xiàn)在就是添加了U盤的IAP下載代碼,原有的串口IAP下載都無(wú)法使用了

具體就是代碼中出現(xiàn)了ret = CHRV3ByteRead( );函數(shù),沒有調(diào)用都會(huì)導(dǎo)致IAP下載后復(fù)位沒有反應(yīng)

不知道是不是CH103子程序庫(kù)和IAP程序不兼容嗎?希望解答一下謝謝!



部分程序

while(1)
????{
????????//串口,只是為了驗(yàn)證程序可以通過串口升級(jí)
????????if(?USART_GetFlagStatus(USART1,?USART_FLAG_RXNE)?!=?RESET){
????????????UART_Rx_Deal();
????????}


????????//U盤,在整個(gè)過程我沒有鏈接U盤,所以就代碼來說下面代碼是不會(huì)執(zhí)行的,
????????//但我使用上面的串口進(jìn)行在IAP下載成功后,通過復(fù)位按鍵或斷電復(fù)位芯片完全沒有反應(yīng)
????????//通過排查,在程序中出現(xiàn)了CHRV3ByteRead函數(shù)后,就出現(xiàn)復(fù)位后沒有反應(yīng)的問題,
????????//一旦屏蔽CHRV3ByteRead函數(shù),就可以通過上面的串口進(jìn)行IAP下載,并復(fù)位后可以跳轉(zhuǎn)到APP正常運(yùn)行
????????if(?USBHSH->INT_FG?&?USBHS_DETECT_FLAG?)
????????{
????????????USBHSH->INT_FG?=?USBHS_DETECT_FLAG;
????????????if(?USBHSH->MIS_ST?&?USBHS_ATTCH?)
????????????{
????????????????ret?=?USBHS_HostEnum(?);
????????????????if(?ret?==?ERR_SUCCESS?)
????????????????{

????????????????????printf(?"Enum?Succeed\r\n"?);
????????????????????Delay_Ms(100);
????????????????????//?U盤操作流程:USB總線復(fù)位、U盤連接、獲取設(shè)備描述符和設(shè)置USB地址、可選的獲取配置描述符,之后到達(dá)此處,由CH103子程序庫(kù)繼續(xù)完成后續(xù)工作
????????????????????CHRV3DiskStatus?=?DISK_USB_ADDR;

??????????????????????????printf(?"Wait?DiskReady\r\n"?);
??????????????????????????ret?=?CHRV3DiskReady(?);?????????????????????????????????//等待U盤準(zhǔn)備好
??????????????????????????if?(?ret?==?ERR_SUCCESS?)
??????????????????????????{

??????????????????????????????printf("CHRV3DiskStatus:%02x\r\n",CHRV3DiskStatus);
??????????????????????????????/*?讀文件?*/
??????????????????????????????strcpy(?(PCHAR)mCmdParam.Open.mPathName,?"/708/EXAM_ALL.BIN"?);??//設(shè)置將要操作的文件路徑和文件名
??????????????????????????????ret?=?CHRV3FileOpen(?);???????????????????????????????????????//打開文件
??????????????????????????????if?(?ret?==?ERR_MISS_DIR?||?ret?==?ERR_MISS_FILE?)????????????//沒有找到文件
??????????????????????????????{
??????????????????????????????????printf("沒有找到文件\r\n");
??????????????????????????????}
??????????????????????????????else
??????????????????????????????{

??????????????????????????????????adr=0;
??????????????????????????????????mCmdParam.ByteLocate.mByteOffset?=?0x00;??//移到文件的開頭
??????????????????????????????????CHRV3ByteLocate(?);
??????????????????????????????????i?=?CHRV3FileQuery(?);??????????????????//查詢當(dāng)前文件的信息
??????????????????????????????????mStopIfError(?i?);
??????????????????????????????????printf(?"file?size:%u\r\n",CHRV3vFileSize?);
??????????????????????????????????memset(buf,0,sizeof(buf));
??????????????????????????????????USB_Deal(buf,2,CMD_IAP_ERASE,adr);????//IAP開始命令
??????????????????????????????????///////////二、讀取文件字節(jié)/////////////////////////////////////////
??????????????????????????????????TotalCount?=?CHRV3vFileSize;??????????????????????????????????????//設(shè)置準(zhǔn)備讀取總長(zhǎng)度100字節(jié)

??????????????????????????????????while?(?TotalCount?)
??????????????????????????????????{?
??????????????????????????????????????//如果文件比較大,一次讀不完,可以再調(diào)用CH103ByteRead繼續(xù)讀取,文件指針自動(dòng)向后移動(dòng)
??????????????????????????????????????//模擬串口的數(shù)據(jù)包大小
??????????????????????????????????????if?(?TotalCount?>?60?)?t?=?60;/*?剩余數(shù)據(jù)較多,限制單次讀寫的長(zhǎng)度不能超過?sizeof(?mCmdParam.Other.mBuffer?)?*/
??????????????????????????????????????else?t?=?TotalCount;?????????????????????????????????/*?最后剩余的字節(jié)數(shù)?*/
??????????????????????????????????????mCmdParam.ByteRead.mByteCount?=?t;???????????????????/*?請(qǐng)求讀出幾十字節(jié)數(shù)據(jù)?*/
??????????????????????????????????????mCmdParam.ByteRead.mByteBuffer=?&buf[0];
//在程序中出現(xiàn)了CHRV3ByteRead函數(shù),就算沒有調(diào)用,在IAP下載成功后,復(fù)位芯片就完全沒有反應(yīng)?。。?
//??????????????????????????????????????ret?=?CHRV3ByteRead(?);????????????????????????????????/*?以字節(jié)為單位讀取數(shù)據(jù)塊,單次讀寫的長(zhǎng)度不能超過MAX_BYTE_IO,第二次調(diào)用時(shí)接著剛才的向后讀?*/
??????????????????????????????????????TotalCount?-=?mCmdParam.ByteRead.mByteCount;???????????/*?計(jì)數(shù),減去當(dāng)前實(shí)際已經(jīng)讀出的字符數(shù)?*/

??????????????????????????????????????USB_Deal(buf,mCmdParam.ByteRead.mByteCount,CMD_IAP_PROM,adr);?//發(fā)送數(shù)據(jù)并寫入FLASH
??????????????????????????????????????adr?+=?mCmdParam.ByteRead.mByteCount;?//IAP數(shù)據(jù)地址偏移

??????????????????????????????????????//數(shù)據(jù)查看
//??????????????????????????????????????for?(?i=0;?i!=mCmdParam.ByteRead.mByteCount;?i++?)
//??????????????????????????????????????{
//??????????????????????????????????????????printf(?"%c",?buf[i]?);??/*?顯示讀出的字符?*/
//??????????????????????????????????????}
//??????????????????????????????????????if?(?mCmdParam.ByteRead.mByteCount?<?t?)
//??????????????????????????????????????{
//??????????????????????????????????????????/*?實(shí)際讀出的字符數(shù)少于要求讀出的字符數(shù),說明已經(jīng)到文件的結(jié)尾?*/
//??????????????????????????????????????????printf(?"\r\n"?);
//??????????????????????????????????????????printf(?"文件已經(jīng)結(jié)束\r\n"?);
//??????????????????????????????????????????break;
//??????????????????????????????????????}

??????????????????????????????????}

??????????????????????????????????printf("IAP?END,To?verify\r\n");
??????????????????????????????????//驗(yàn)證數(shù)據(jù)
??????????????????????????????????adr?=?0;
??????????????????????????????????mCmdParam.ByteLocate.mByteOffset?=?0x00;??//移到文件的開頭
??????????????????????????????????CHRV3ByteLocate(?);
??????????????????????????????????i?=?CHRV3FileQuery(?);??????????????????//查詢當(dāng)前文件的信息
??????????????????????????????????mStopIfError(?i?);
//??????????????????????????????????printf(?"file?size:%u\r\n",CHRV3vFileSize?);
??????????????????????????????????TotalCount?=?CHRV3vFileSize;??????????????????????????????????????//設(shè)置準(zhǔn)備讀取總長(zhǎng)度100字節(jié)
??????????????????????????????????while?(?TotalCount?)
??????????????????????????????????{??????????????????????????????????????????????????????//如果文件比較大,一次讀不完,可以再調(diào)用CH103ByteRead繼續(xù)讀取,文件指針自動(dòng)向后移動(dòng)
??????????????????????????????????????if?(?TotalCount?>?60?)?t?=?60;/*?剩余數(shù)據(jù)較多,限制單次讀寫的長(zhǎng)度不能超過?sizeof(?mCmdParam.Other.mBuffer?)?*/
??????????????????????????????????????else?t?=?TotalCount;?????????????????????????????????/*?最后剩余的字節(jié)數(shù)?*/
??????????????????????????????????????mCmdParam.ByteRead.mByteCount?=?t;???????????????????/*?請(qǐng)求讀出幾十字節(jié)數(shù)據(jù)?*/
??????????????????????????????????????mCmdParam.ByteRead.mByteBuffer=?&buf[0];
//??????????????????????????????????????ret?=?CHRV3ByteRead(?);????????????????????????????????/*?以字節(jié)為單位讀取數(shù)據(jù)塊,單次讀寫的長(zhǎng)度不能超過MAX_BYTE_IO,第二次調(diào)用時(shí)接著剛才的向后讀?*/
??????????????????????????????????????TotalCount?-=?mCmdParam.ByteRead.mByteCount;???????????/*?計(jì)數(shù),減去當(dāng)前實(shí)際已經(jīng)讀出的字符數(shù)?*/

??????????????????????????????????????USB_Deal(buf,mCmdParam.ByteRead.mByteCount,CMD_IAP_VERIFY,adr);?//發(fā)送數(shù)據(jù),這里會(huì)進(jìn)行對(duì)比
??????????????????????????????????????adr?+=?mCmdParam.ByteRead.mByteCount;?//IAP數(shù)據(jù)地址偏移

//??????????????????????????????????????for?(?i=0;?i!=mCmdParam.ByteRead.mByteCount;?i++?)
//??????????????????????????????????????{
//??????????????????????????????????????????printf(?"%c",?buf[i]?);??/*?顯示讀出的字符?*/
//??????????????????????????????????????}
//??????????????????????????????????????if?(?mCmdParam.ByteRead.mByteCount?<?t?)
//??????????????????????????????????????{
//??????????????????????????????????????????/*?實(shí)際讀出的字符數(shù)少于要求讀出的字符數(shù),說明已經(jīng)到文件的結(jié)尾?*/
//??????????????????????????????????????????printf(?"\r\n"?);
//??????????????????????????????????????????printf(?"文件已經(jīng)結(jié)束\r\n"?);
//??????????????????????????????????????????break;
//??????????????????????????????????????}
??????????????????????????????????}

??????????????????????????????????adr=?0;
??????????????????????????????????USB_Deal(buf,2,CMD_IAP_END,adr);????//IAP結(jié)束命令
??????????????????????????????????printf(?"Close\r\n"?);
??????????????????????????????????i?=?CHRV3FileClose(?);????????????????????????????????????/*?關(guān)閉文件?*/
??????????????????????????????????mStopIfError(?i?);
??????????????????????????????}
??????????????????????????????break;
??????????????????????????}
??????????????????????????else
??????????????????????????{
??????????????????????????????printf("s?=?%02x\r\n",ret);
??????????????????????????????printf("CHRV3DiskStatus:%02x\n",CHRV3DiskStatus);
??????????????????????????}
??????//????????????????????Delay_Ms(?50?);
????????????????}
????????????????else
????????????????{

????????????????}
????????????}
????????????else
????????????{
????????????????USBHS_HostInit(DISABLE);
????????????????USBHS_HostInit(ENABLE);
????????????????CHRV3DiskStatus?=?DISK_DISCONNECT;
????????????????printf("disconnect\n");
????????????}
????????}
????????IWDG_ReloadCounter();
????}


您好,附件為CH32V307 U盤IAP升級(jí)例程,可以參考一下

icon_rar.gifCH32V307 U盤IAP.zip



好的,謝謝!



你好,使用提供的U盤IAP范例,插入U(xiǎn)盤,偵測(cè)不到,請(qǐng)問是什么原因?板子為購(gòu)買的開發(fā)板


您好,該U盤IAP例程對(duì)應(yīng)的USB引腳為PB6、PB7引腳,注意一下插入U(xiǎn)SB口是否正確。目前,在我們CH32V307 EVT中有對(duì)應(yīng)的USBFS以及USBHS IAP升級(jí)例程,你可以用最新EVT例程測(cè)試一下。EVT下載鏈接如下,后續(xù)若有問題,可通過郵箱(lzs@wch.cn)和我溝通。此外,需要注意一下你U盤文件系統(tǒng)的格式,目前不支持NTFS

http://www.findthetime.net/downloads/CH32V307EVT_ZIP.html?


image.png



試過三種U盤,F(xiàn)AT32,用轉(zhuǎn)接頭接在TYPEC接口上(PB6,PB7),均無(wú)法檢測(cè)到U盤插入。范例:CH32V307EVT\EVT\EXAM\USB\USBHS\HOST_IAP

YD-CH32V307VCT6-board-720x616.png


您好,我用我們的評(píng)估版測(cè)試是沒問題的,我們U盤例程中第一個(gè)示例需要在U盤中手動(dòng)創(chuàng)建C51文件夾,否則會(huì)提示找不到文件目錄的錯(cuò)誤,具體操作流程已發(fā)您的郵箱,后續(xù)有問題可以郵箱聯(lián)系我:kx@wch.cn


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频