發新話題
打印

F310 程式更新

F310 程式更新

目前用F310這顆MCU,程式也跑一段時間了,新需求是做程式更新
程式碼來自電腦端VB介面,由MCU端UART接收HEX並更新Flash,
bootcode觀念大致上知道,還有一些地方有些模糊,請較一下^^

1.bootcode我希望他被寫在程式的最前端,假設在程式的前面1k
以內,程式更新部份則是只更新1k到最後面,bootcode不做更新,
那我要怎麼設定才可以確保我的bootcode fun在1k之前,之後的
code (main code 或main code 之前的一些fun)從1k之後開
始.

2.有試過將mcu code用FLASH Programming Utility讀出來
和keil c產生的hex檔做比對,某些地方一樣但卻不是完全一樣且
連續,假設可以設定bootcode在1k之前其餘程式在1k之後,第一
次燒錄用FLASH Programming Utility將整個hex(含bootcode)
燒到MCU,往後的程式只更新1K之後,(假設VB開檔等等不成問題)我
該怎麼"擷取"出HEX中1K之後的燒錄code並且是連續的,讓我的bootcode
端可以以連續的方式接收燒錄code,從1k之後的flash一直燒到最後.

謝謝

TOP

補充:因為要做程式更新就沒辦法做到code保護,保護的部份打算利用前面
的1k做,因為前面1k(含bootcode)在mcu第一次燒錄後就不再做更改,這
1k區塊會lock為不可讀寫的狀態,至於怎麼用這不能讀寫的1k做到保護,目
前還在想...
原廠an112有看過但和FLASH Programming Utility讀出來的東西還是
對不起來><"

TOP

引用:
原帖由 1984cf 於 2011-2-16 11:12 發表
目前用F310這顆MCU,程式也跑一段時間了,新需求是做程式更新
程式碼來自電腦端VB介面,由MCU端UART接收HEX並更新Flash,
bootcode觀念大致上知道,還有一些地方有些模糊,請較一下^^

1.bootcode我希望他被寫在程式的 ...
1.要指定Boot Code Compiler位址,這要設定 IDE Linker 參數,方法可參考AN112所附的 IDE Project code
  (請開啟IDE Project→Tool Chain Integration→Linker --->參考Command line flags這裡的參數設定)
2."擷取出HEX中1K之後的燒錄code..." 最簡單的方法就是用市售的燒錄器所附的燒錄軟體去Load 該HEX file
   ,再利用燒錄軟體重新排序的功能,此時你會得到一份位址從0x000000H~0xFFFFFFH Memory Map,這時
    應該可以選擇擷取1K之後的燒錄code將其存成一份HEX file即可。  
    或者可上網找找是否有HEX file編輯器軟體來試試。

[ 本帖最後由 Stevenyang 於 2011-2-23 16:17 編輯 ]

TOP

引用:
原帖由 1984cf 於 2011-2-16 11:40 發表
補充:因為要做程式更新就沒辦法做到code保護,保護的部份打算利用前面
的1k做,因為前面1k(含bootcode)在mcu第一次燒錄後就不再做更改,這
1k區塊會lock為不可讀寫的狀態,至於怎麼用這不能讀寫的1k做到保護,目
前還在 ...
F310有支援區塊Flash Lock功能,可選擇將0000H~03FFH(1K)Address Lock,另外在燒錄Bootload Code到
這1K的位址時,可以加入Unique Device ID在裡面,當在做Bootload Function時可以讓PC AP透過UART去
讀取該UniqueDevice ID,因每顆MCU所燒進去的Unique Device ID是Only one的無法複製,這樣就可以防止
被人Copy,除非有內部員工將驗證Unique Device ID演算法外流不然第三者拿到了軟硬體也無法複製。
PS:Unique Device ID演算法要自己去想如何設計。

TOP

引用:
原帖由 Stevenyang 於 2011-2-23 16:04 發表


1.要指定Boot Code Compiler位址,這要設定 IDE Linker 參數,方法可參考AN112所附的 IDE Project code
  (請開啟IDE Project→Tool Chain Integration→Linker --->參考Command line flags這裡的參數設定)
2. ...
^^"...不知道可以說明一下keil-c環境下又怎嚜設定呢? 不好意思.因為keil-c
用習慣了.

TOP

在網路上有找到相關設定
Options for Target 'Target 1' -> BL51 Locate -> Code 內輸入
?PR?某.C檔下的副程式名稱?某.C檔(0x1000)
可以將該函式定址在0x1000,但其他函式我該怎麼設定才可以讓沒特別
設定的其他函式定址在特定的位址之後?

[ 本帖最後由 1984cf 於 2011-3-1 16:43 編輯 ]

TOP

找了好久終於找到答案了
http://www.keil.com/support/docs/940.htm

[ 本帖最後由 1984cf 於 2011-3-2 17:18 編輯 ]

TOP

發新話題