:::


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Bootloader與讀取Flash progrm問題
#1
高級會員
高級會員


查看用戶資訊
大家好
目前開發Bootloader去更新程式
產品設計沒有外部的硬體可以去控制要不要進入Bootloader
只能透過USB控制,進入Bootloader
所以目前設計是經過一套制訂程式才進入Bootloader
但怕這套制訂程序更新失敗或錯誤,將會永遠無法更新程式或讓產品無法動作
所以我現在的想法是,在程式的一開始去計算Flash program的checksum
假設計算出來的checksum是0x2956
然後再去檢查是不是0x2956,是執行正常程式,不是執行Bootloader
我的問題是
如果沒有進行程式修改的話,Flash program的checksum每次都會一樣,對不對
MCU損壞應該也不會影響到Flash program吧
一直讀取Flash program有沒有壽命的問題

發表於: 2018/9/12 11:39
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#2
版主
版主


查看用戶資訊
可以考慮用下命令的方式,由 USB 下達一特殊封包指令進入 Bootloader Mode。

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

發表於: 2018/9/12 13:52
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#3
高級會員
高級會員


查看用戶資訊
謝謝Ryang的回覆
目前我正常操作就是下達一特殊封包指令進入 Bootloader Mode
因程式設計關係,可能會抹除到USB的接收程式
更新不好可能會無法透過特殊封包指令進入 Bootloader Mode
所以才想計算Flash program的checksum
如果更新失敗,還有另一條路可以進入Bootloader
才想問Flash program,除了Bootloader與ICSP之外,應該不會被改變吧
另外我問題的是"讀取"的壽命,不是"燒寫"的壽命

發表於: 2018/9/12 15:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#4
版主
版主


查看用戶資訊
參照:
因程式設計關係,可能會抹除到USB的接收程式


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

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

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

發表於: 2018/9/13 13:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#5
高級會員
高級會員


查看用戶資訊
目前的Bootloader是寫在程式空間的最後面,並非前面
目的是為了之後好維護程式(會延伸出許多不同程式)
所以無法使用Config. Bits來保護程式

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

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

發表於: 2018/9/13 14:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#6
版主
版主


查看用戶資訊
當然你可以使用這 Checksum 的方式來判斷 Bootload 後的應用程式是否完整。

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

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

發表於: 2018/9/13 14:11
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#7
高級會員
高級會員


查看用戶資訊
謝謝Ryang提供一個很不錯的方法
我的MCU是有用到EEPROM
但之前有發生過客戶使用了2.3年
後來故障退回來,檢查後EEPROM資料不明原因都跑掉了(比例非常低)
所以怕用EEPROM來判別,如果遇到客戶這種狀況就會一直進入Bootloader
反而更糟糕
不過這是一個很好的方式,我會在想看看有沒有配套方式,可以改善EEPROM跑掉的問題

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

發表於: 2018/9/13 14:29
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#8
版主
版主


查看用戶資訊
EEPROM 資料遺失的問題這幾年看下來幾乎都是開、關機時電壓不正常時導致的誤動作。解決之道是開啟 PIC 的 Brown-Out Reset 並設定一個低於 Vcc 的偵測電壓即可避免因開、關機所造成的誤動作。

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

發表於: 2018/9/13 14:53
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#9
高級會員
高級會員


查看用戶資訊
謝謝Ryang提供的方式,我會試看看的,看哪一種方式比較適合我

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

發表於: 2018/9/13 15:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Bootloader與讀取Flash progrm問題
#10
版主
版主


查看用戶資訊
BOR 沒啟用,後面設幾伏特都沒有用。一般 BOR Enable後,作動的電壓大該低於 PIC 供電電壓的 80% 即可。例如 5V Vcc 就設定 BOR 電壓為 4.1V。如果是 3.3V 就設在 2.7V 左右。

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

發表於: 2018/9/13 15:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]