usb中斷是否不允許寫flash

?今天發(fā)現(xiàn)之前的之前工程師遺留的問題,他在usb中斷的時候調用了寫flash,這樣會容易出錯是嗎?正常情況下,中斷函數(shù)是不運行操作flash的。因為寫flash會進入安全模式,安全模式一般會關閉總中斷。想和原廠確認一下,是否usb中斷不能操作flash。謝謝



case UIS_TOKEN_OUT | 4:? ? ? ?

if( U_TOG_OK )

{

len = USB_RX_LEN;

UEP0_CTRL ^= bUEP_R_TOG;/* ·?×? */

UEP0_CTRL = UEP0_CTRL & ~ MASK_UEP_R_RES | UEP_R_RES_NAK;??

//state = 1;


//if(Ep0Buffer[64] == 0x05 && Ep0Buffer[65] == 0x01 && Ep0Buffer[66] == 0x01 && Ep0Buffer[67] == 0x00 && Ep0Buffer[68] == 0x08 && Ep0Buffer[69] == 0x05){

//state = 2;

//}else{

//state = 1;

//}

//if(Ep0Buffer[65] == 0x01){

//state = 2;

//}

if(Ep0Buffer[65] == 0x01){

memset(HIDData1,0,sizeof(HIDData1));//°?HIDData1??0

memcpy(HIDData1, &Ep0Buffer[66], Ep0Buffer[64] - 1);

WriteDataFlash(0, &HIDData1, sizeof(HIDData1));

}


1、安全模式需要關閉總中斷,這個不是強制的,只是安全模式有效時間較短,如果有中斷可能會導致安全模式有效時間被中斷消耗掉,導致目標操作超時,變成無效操作。


2、芯片可以在任何時候進行FLASH的操作。

image.png

但是操作FLASH的代價是芯片(CPU)會“停止”,代碼、交互邏輯要足夠健壯,確保芯片在進入這種暫停狀態(tài)之前所有的通訊都處于期望狀態(tài)。

舉個例子:

1、芯片作為USB設備,在寫FLASH之前應當將所有使用到的Endpoint的應答狀態(tài)改成NAK,這樣即使芯片暫停運行,也不會有USB事務能夠被完成,從USB主機的視角來看,設備是正常的,否則可能會有非期望的數(shù)據(jù)被傳輸。

2、串口通訊,芯片要操作FLASH之前應當告知串口通訊的對象,自身即將處于無響應的狀態(tài),這個時候不要發(fā)送數(shù)據(jù),直到芯片寫FLASH結束,通知串口通訊對象,自身已經(jīng)退出無響應狀態(tài),再繼續(xù)雙向的數(shù)據(jù)交互。



只有登錄才能回復,可以選擇微信賬號登錄

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