會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


Bootloader與讀取Flash progrm問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 99
等級: 8; EXP: 94
HP : 0 / 198
MP : 33 / 7226
離線
大家好
目前開發Bootloader去更新程式
產品設計沒有外部的硬體可以去控制要不要進入Bootloader
只能透過USB控制,進入Bootloader
所以目前設計是經過一套制訂程式才進入Bootloader
但怕這套制訂程序更新失敗或錯誤,將會永遠無法更新程式或讓產品無法動作
所以我現在的想法是,在程式的一開始去計算Flash program的checksum
假設計算出來的checksum是0x2956
然後再去檢查是不是0x2956,是執行正常程式,不是執行Bootloader
我的問題是
如果沒有進行程式修改的話,Flash program的checksum每次都會一樣,對不對
MCU損壞應該也不會影響到Flash program吧
一直讀取Flash program有沒有壽命的問題

9月12日 11:39:38
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14528
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76619
離線
可以考慮用下命令的方式,由 USB 下達一特殊封包指令進入 Bootloader Mode。

Flash Memory 燒寫次數約在 1 萬次左右。EEPROM 在 1 百萬次做又。

9月12日 13:52:25
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 99
等級: 8; EXP: 94
HP : 0 / 198
MP : 33 / 7226
離線
謝謝Ryang的回覆
目前我正常操作就是下達一特殊封包指令進入 Bootloader Mode
因程式設計關係,可能會抹除到USB的接收程式
更新不好可能會無法透過特殊封包指令進入 Bootloader Mode
所以才想計算Flash program的checksum
如果更新失敗,還有另一條路可以進入Bootloader
才想問Flash program,除了Bootloader與ICSP之外,應該不會被改變吧
另外我問題的是"讀取"的壽命,不是"燒寫"的壽命

9月12日 15:49:43
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14528
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76619
離線
引用:
因程式設計關係,可能會抹除到USB的接收程式


會抹除掉 USB Bootloader 就有問題了,因為你所載入的應用程式是不可以有重疊到此位址的,否則下載到一半將 USB 接收部分刪除了,那 Bootload 的運作不就掰掰了嗎?

一般 Bootloader 的程式段是可以透過 Config. Bits 的設定加以保護,並可以關閉這格區域的 Flash Write 功能。

Flash Memory 在架構上無讀取次數的限制,也就是說有寫入1萬次的壽命,無讀取資料的壽命限制。

9月13日 13:07:04
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 99
等級: 8; EXP: 94
HP : 0 / 198
MP : 33 / 7226
離線
目前的Bootloader是寫在程式空間的最後面,並非前面
目的是為了之後好維護程式(會延伸出許多不同程式)
所以無法使用Config. Bits來保護程式

現在最怕的事,更新到一半斷電或失敗,無法使用USB的特殊封包進入Bootloader
所以才想在程式的一開始檢查程式的checksum,不是原來的checksum就進入Bootloader
當然Bootloader在Erase時,是不能Erase到Bootlader與一開始檢查checksum程式
所以才想說,Flash program,除了Bootloader與ICSP之外,應該不會被改變

還是各位有更好的方式,依我的架構,在Bootloader更新失敗的時候,還有挽救的機會

9月13日 14:01:06
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14528
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76619
離線
當然你可以使用這 Checksum 的方式來判斷 Bootload 後的應用程式是否完整。

如果你用的 PIC 有內建 EEPROM 的話,更簡單的做法是收到 Bootloader 命令時將某個特定 EEPROM 位址的資料清除為 0,待完成下載工作並檢查無誤後再將此 EEPROM 位址的資料寫入 0xA5。

以後每次開機或更新中被關機...只要一開機就檢查這 EEPROM 的資料,看是不是沒有應用程式 = 0x00,或更新失敗 = 0xNN,或是應用程式正常 = 0xA5。這樣就很清楚的知道更新的狀況。

9月13日 14:11:42
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 99
等級: 8; EXP: 94
HP : 0 / 198
MP : 33 / 7226
離線
謝謝Ryang提供一個很不錯的方法
我的MCU是有用到EEPROM
但之前有發生過客戶使用了2.3年
後來故障退回來,檢查後EEPROM資料不明原因都跑掉了(比例非常低)
所以怕用EEPROM來判別,如果遇到客戶這種狀況就會一直進入Bootloader
反而更糟糕
不過這是一個很好的方式,我會在想看看有沒有配套方式,可以改善EEPROM跑掉的問題

另外,我想問,我在試Bootloader更新程式時
正常來說,要先Erase程式,在寫入更新程式
如果沒有先Erase程式,就直接更新程式的話
原來的程式會錯亂掉,對不對?

9月13日 14:29:16
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14528
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76619
離線
EEPROM 資料遺失的問題這幾年看下來幾乎都是開、關機時電壓不正常時導致的誤動作。解決之道是開啟 PIC 的 Brown-Out Reset 並設定一個低於 Vcc 的偵測電壓即可避免因開、關機所造成的誤動作。

此外,還有一個方法就是由 USB 下一個可以修改 EEPROM 的命令並存在一個變數裡,EEPROM 要修改時先檢查此變數值後清除此變數,再修改 EEPROM。也就是說要有修改命令才能去變更 EERPM 的值,且這變更是別人授權的不是我的應用程式自己就可以亂改的,這樣即使掉電後也不會改改到 EEPROM 的值。

9月13日 14:53:54
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
高級會員
註冊日期:
2006/06/06 08:38
所屬群組:
註冊會員
文章: 99
等級: 8; EXP: 94
HP : 0 / 198
MP : 33 / 7226
離線
謝謝Ryang提供的方式,我會試看看的,看哪一種方式比較適合我

你提到的EEPROM資料遺失問題
我用的是PIC16F1827,在Config.設定BOREN_OFF與BORV_19,看樣子我的Brown-Out Reset沒有打開
所以因開、關機電壓造成的EEPROM誤動作
謝謝你的提醒,不然每次處理這個問題,我只能說是MCU異常問題,原因不明,無解

9月13日 15:31:16
轉換PDF檔 列印


Re: Bootloader與讀取Flash progrm問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14528
等級: 73; EXP: 10
HP : 1081 / 1802
MP : 4842 / 76619
離線
BOR 沒啟用,後面設幾伏特都沒有用。一般 BOR Enable後,作動的電壓大該低於 PIC 供電電壓的 80% 即可。例如 5V Vcc 就設定 BOR 電壓為 4.1V。如果是 3.3V 就設在 2.7V 左右。

設 BOR 的原因是避免程式在低於正常工作電壓時的亂執行,這時執行到 EEPROM 的寫入程式那就資料遺失了...

9月13日 15:59:12
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project