Part Number:TMS570LS0714
您好:
我想對TMS570LS0714APZ做BOOTLOADER,在相同的程式但不同顆IC,會發現有的可以燒錄成功,但是有的會失敗,以下是我測試的情況
1. 雖然調整SYS_CLK_FREQ可以解決不同IC無法燒錄成功的問題,但SYS_CLK_FREQ是固定的,量產時無法針對每一顆IC做調整,所以這個方式無法採用
2. 再燒錄失敗後讀取燒錄的內容,發現會有一個現象,就是每次都是16個BYTE的值是0xFF,也就是沒有寫入成功,看起來問題點在Fapi_BlockProgram,紅色字體的2個判斷條件是我增加的,有改善但是還是會出現錯誤
uint32_t Fapi_BlockProgram( uint32_t Bank, uint32_t Flash_Address, uint32_t Data_Address, uint32_t SizeInBytes)
{
register uint32_t src = Data_Address;
register uint32_t dst = Flash_Address;
uint32_t bytes;
if (SizeInBytes < 16)
bytes = SizeInBytes;
else
bytes = 16;
if ((Fapi_initializeFlashBanks((uint32_t)SYS_CLK_FREQ)) == Fapi_Status_Success)
{
(void)Fapi_setActiveFlashBank((Fapi_FlashBankType)Bank);
(void)Fapi_enableMainBankSectors(0x0FFF); /* used for API 2.01*/
}
else {
return (1);
}
while( FAPI_CHECK_FSM_READY_BUSY != Fapi_Status_FsmReady );
while( FAPI_GET_FSM_STATUS != Fapi_Status_Success );
while( SizeInBytes > 0)
{
Fapi_issueProgrammingCommand((uint32_t *)dst,
(uint8_t *)src,
(uint32_t) bytes,
0,
0,
Fapi_AutoEccGeneration);
while( FAPI_CHECK_FSM_READY_BUSY == Fapi_Status_FsmBusy );
while(FAPI_GET_FSM_STATUS != Fapi_Status_Success);
while( FAPI_CHECK_FSM_READY_BUSY != Fapi_Status_FsmReady );
src += bytes;
dst += bytes;
SizeInBytes -= bytes;
if ( SizeInBytes < 16){
bytes = SizeInBytes;
}
}
return (0);
}
我想問的問題是以下幾點:
1. 每次燒錄16個BYTE後,要如何確認已經燒錄成功
2. 如果我在每次燒錄16個BYTE後就執行Flash_Program_Check(),需要先設定或檢查什麼狀態,還是要先延遲一段時間
3. 目前每次接收2048個Byte的資料,就開始燒錄,這個暫存區的大小有限制嗎?會這樣問是因為我會在接收2048個Byte的資料後就連續寫入,直到燒錄完成後再接收下一筆2048個Byte
4. SYS_CLK_FREQ要設定多少MHZ會比較好,目前設在64MHZ
5. 為什麼調整 SYS_CLK_FREQ 會影響燒錄的成功率(調整的範圍 32MHz ~ 80MHz)
Weeken Chang:
錯誤時讀取FLASH內容,會發連續16個BYTE,都沒有寫入
,
Ben Qin:
你好,我咨询下资深工程师后回复您。
,
Weeken Chang:
請問有回覆了嗎?謝謝
,
Ben Qin:
你好,看见您在英文论坛发的帖子了,还请关注那边的回复:
(+) TMS570LS0714: Bootloader – Processors forum – Processors – TI E2E support forums