討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 網路投保旅行平安險 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
關於WISCORE NET-Start!的實驗板
更改我的閱讀文章字型大小
作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/25 下午 07:30:21
1. 向商家詢問如何練習bootloader程式, 他們回答, 無法給使用者練習bootloader程式,會把實驗板弄壞,請問有什麼辦法可以練習bootloader程式?

2.將compile好的binary code, 利用板子內建的bootloader程式download至位址0的地方,
   為什麼無法download? 可是, download至位址0x40或位址0x8000等其他16MB的位址範圍內卻又可以?(板子reset之後, bootloader會將memory map重新remap一次, 所以
內建16MB的SDRAM的位址會被remap到位址0 ~ 0x01000000的地方, 而Flash的位址會被remap到0x01800000 ~ 0x01A00000的範圍, 本來Flash的位址是0 ~ 0x00200000)

3.如果程式無法download至位址0的地方, 那麼中斷向量0x18該如何處理?

不知有誰也有買這塊實驗板? 是否有這樣的疑問?
作者 : leesun(leesun)
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人yyj註記此篇回應為很有道理 2004/6/27 下午 03:05:20
不然為什麼那麼多人冒風險跟大陸團購實驗板與ICE?就是因為台灣廠商「留一手」,
「公開boot loader程式會把板子弄壞」,這種說法不過是個幌子,像我們這種個體戶
他們根本不看在眼裡(能賺幾個錢?),鎖住bootloader的真正原因是他們是希望其他
公司買去開發產品,等到產品需要量產上市的時候,他們就可以收取bootloader
升級維護的費用,甚至是port Linux的費用,我懷疑他們根本就是把實驗板當SBC在賣...

作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/27 下午 05:26:05
實驗版沒有辦法學習bootloader,也沒有辦法處理ISR, 這東西真是"無三小路用"
問廠商也是愛理不理,最後跑出來一個女業務員, 說: 自己寫bootloader程式會弄壞板子,要自己拿回來維修,真不知道買這個東西要做什麼?
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/28 上午 11:28:34

可以利用 ICE (我用EPI的) 將 bootloader 燒回去
在這情形下要試bootloader自然方便多了

不然維修的確很麻煩
而且廠商也可能沒能力或許不知道利用ICE將 bootloader 燒回去
當然很怕維修

公司如果有 ICE 那就可以放心的試
個人的話就多考慮考慮

不過你把程式直接燒到 0x18000000 (bootloader) 而故障的話
廠商不知修不修?
作者 : leesun(leesun)
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/28 下午 01:19:33
把bootloader用ICE燒進去都不知道?廠商程度這麼差的話更不要跟他們買,不過剛剛
去他們首頁又看了一下,他上面寫的evalution kit,既然是「評估」板,我當然可以不公開
bootloader,跟他們簽NDA也許願意給source code吧?......@@
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/28 下午 04:33:05

>實驗版沒有辦法學習bootloader,也沒有辦法處理ISR, 這東西真是'無三小路用'
第一,沒有特殊原因廠商不會隨便給 boot loader code,除非IC硬體有內建boot code.否則一但code update失敗,沒有ICE,真的會很麻煩.
第二,賣開發板,提供一些方便開發的程式,不代表廠商一定要提供source code吧?感覺上這個廠商的開發板重點似乎放在 uCLinux上.不是放在 boot loader上.
第三,沒有boot loader source code就不能處理ISR,這是誰說的呀?我就沒聽說過這回事?

所以給你一個建議,先去找找板子上那顆 CPU的datasheet.弄清楚CPU有沒有內建 boot loader code.有的話,調到那個模式,自己寫 boot loader,取代廠商提供的boot loader.



作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 上午 08:25:46

>
>可以利用 ICE (我用EPI的) 將 bootloader 燒回去
>在這情形下要試bootloader自然方便多了
>
>不然維修的確很麻煩
>而且廠商也可能沒能力或許不知道利用ICE將 bootloader 燒回去
>當然很怕維修
>
>公司如果有 ICE 那就可以放心的試
>個人的話就多考慮考慮
>
>不過你把程式直接燒到 0x18000000 (bootloader) 而故障的話
>廠商不知修不修?
====================================================
* 經過我的研究,利用ICE, 經由JTAG也可以燒錄bootloader到flash中,我並沒有去嘗試,因為我沒有ICE, 而且ICE的價格比這個評估板貴很多, 個人用戶實在沒有辦法花這種錢.

*廠商當然有能力可以將bootloader燒回去, 否則他怎會說:"可以送回維修" .

*錢花不下去買ICE.

*廠商說他會修.
作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 上午 08:31:16

>把bootloader用ICE燒進去都不知道?廠商程度這麼差的話更不要跟他們買,不過剛剛
>去他們首頁又看了一下,他上面寫的evalution kit,既然是「評估」板,我當然可以不公開
>bootloader,跟他們簽NDA也許願意給source code吧?......@@

====================================================
廠商有說可以利用ICE燒錄(抱歉, 沒有交代清楚讓你誤會廠商了), 只是自行燒錄而造成無法使用,則必須自行送回公司作維修.

原來, 評估板是不公開bootloader的程式, 我也不知道, 現在聽你說我才知道.

請問NDA是什麼?
謝謝!
作者 : jwhwang(jw)
[ 貼文 1 | 人氣 5 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 上午 08:37:52
Non-Disclosure-Agreement

作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 上午 09:01:19

>
>>實驗版沒有辦法學習bootloader,也沒有辦法處理ISR, 這東西真是''無三小路用''
>第一,沒有特殊原因廠商不會隨便給 boot loader code,除非IC硬體有內建boot code.否則一但code update失敗,沒有ICE,真的會很麻煩.
>第二,賣開發板,提供一些方便開發的程式,不代表廠商一定要提供source code吧?感覺上這個廠商的開發板重點似乎放在 uCLinux上.不是放在 boot loader上.
>第三,沒有boot loader source code就不能處理ISR,這是誰說的呀?我就沒聽說過這回事?
>
>所以給你一個建議,先去找找板子上那顆 CPU的datasheet.弄清楚CPU有沒有內建 boot loader code.有的話,調到那個模式,自己寫 boot loader,取代廠商提供的boot loader.
====================================================

1. IC本身沒有內建boot code.

2. 對阿!我發現廠商大部分給的文件都是關於uCLinux, 無論是GNU Tool chain或uCLinux source code.

3. 這就是我第一篇文章的問題, 沒有bootloader source code 當然還是可以處理ISR,
   因為bootloader啟動之後把flash address由原本的位址0, remap到位址0x01800000 ~
   0x01A00000(2MB), 而把SDRAM的位址remap到位址0 ~ 0x01000000(16MB),所以,
   我只要利用bootloader提供的download選項, 將我的binary code, download到
   位址0的地方,這樣就可以處理ARM的exception(IRQ位於0x18),也不需要什麼bootloader的
   程式碼,也不需要燒錄flash,很單純....
   問題來了, 我無法利用bootloader download binary code 到位址0(Reset),
   位址0x4(Undefined Instructions), 位址0x8(SWI), 位址0xc(Prefetch Abort),
   位址0xA(Data Abort), 位址0x18(IRQ), 位址0x1c(FIQ), 七個exception vector的
   address都不能download程式到裡面, 0x40以上的位址就可以download, 所以, bootloader
   也把exception vector的位址排除, 不讓使用者使用.

   所以, 依照你的回答, H兄似乎可以提供我解決的方法, 懇請您教導一下.謝謝!




作者 : leesun(leesun)
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 上午 09:44:29
我建議樓上的還是去弄台ICE吧,假如我是bootloader的設計者我也會禁止讓你把
code download到某些位址,免得你弄壞板子來找我。雖然沒有bootloader source,
但是藉著datasheet+線路圖(有嗎?),也許還是有機會成功放上自己的bootloader,
祝你好運!

為什麼大陸可以公開bootloader而台灣不公開,我實在搞不懂啊....@@
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人yyj註記此篇回應為很有道理 2004/6/29 上午 09:46:30
>1. IC本身沒有內建boot code.
>
>2. 對阿!我發現廠商大部分給的文件都是關於uCLinux, 無論是GNU Tool chain或uCLinux source code.
>
>3. 這就是我第一篇文章的問題, 沒有bootloader source code 當然還是可以處理ISR,
> 因為bootloader啟動之後把flash address由原本的位址0, remap到位址0x01800000 ~
> 0x01A00000(2MB), 而把SDRAM的位址remap到位址0 ~ 0x01000000(16MB),所以,
> 我只要利用bootloader提供的download選項, 將我的binary code, download到
> 位址0的地方,這樣就可以處理ARM的exception(IRQ位於0x18),也不需要什麼bootloader的
> 程式碼,也不需要燒錄flash,很單純....
> 問題來了, 我無法利用bootloader download binary code 到位址0(Reset),
> 位址0x4(Undefined Instructions), 位址0x8(SWI), 位址0xc(Prefetch Abort),
> 位址0xA(Data Abort), 位址0x18(IRQ), 位址0x1c(FIQ), 七個exception vector的
> address都不能download程式到裡面, 0x40以上的位址就可以download, 所以, bootloader
> 也把exception vector的位址排除, 不讓使用者使用.
>
> 所以, 依照你的回答, H兄似乎可以提供我解決的方法, 懇請您教導一下.謝謝!
要動 vector有一個辦法,就是先把 vector放在 code裡面,在自己的程式開始執行的時候,把向量表copy到 0這個位置去.而不是要靠 boot loader幫你搬,why?
假設你是透過RS232來下載程式,程式還沒下載完成,RS232的ISR怎麼辦?總不能被破壞吧?
這在你的程式要燒進ROM的時候,啟動程式要做的事情一樣.為什麼?原則上 boot loader完成載入動作後跳到user的程式,基本上任務已經完成(有提供system service為例外,說明書會說,而且 boot loader應該會負責 redirect exception vector到別的位置去)所有在RAM的程式,跟使用的記憶體都是可以移除的.
由於ARM的各個exception的stack pointer是分開的.你的程式除了更換 vector外,
切記還必須要把所有的stack pointer設定好.


作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/29 下午 07:18:42

>要動 vector有一個辦法,就是先把 vector放在 code裡面,在自己的程式開始執行的時候,把向量表copy到 0這個位置去.而不是要靠 boot loader幫你搬,why?
>假設你是透過RS232來下載程式,程式還沒下載完成,RS232的ISR怎麼辦?總不能被破壞吧?
>這在你的程式要燒進ROM的時候,啟動程式要做的事情一樣.為什麼?原則上 boot loader完成載入動作後跳到user的程式,基本上任務已經完成(有提供system service為例外,說明書會說,而且 boot loader應該會負責 redirect exception vector到別的位置去)所有在RAM的程式,跟使用的記憶體都是可以移除的.
>由於ARM的各個exception的stack pointer是分開的.你的程式除了更換 vector外,
>切記還必須要把所有的stack pointer設定好.
>
====================================================
H兄分析的很有道理。

原本我有想過此方法,只是此方法實在是很麻煩,要把exception vector轉換成
機器碼,還要計算位址再搬過去,所以一直希望可以直接用bootloader將程式download到
位址0的地方,可是,就像你說的,在download的過程中,RS-232可能正在使用
ISR,這可能會影響程式download的過程。

我在想,如果廠商將FLASH ROM設計成DIP的型式,讓使用者可以用燒錄機來燒錄
bootloader,這樣是不是比較方便一些(畢竟,萬用燒錄機在學校或公司都會有,
相對的ICE就比較少有),而且廠商有提供bootloader的binary code,就算boot
code 沒有寫對,還是可以用燒錄機來還原原有的bootloader程式,還是用DIP的
型式會有其他問題?
以下是廠商email回覆的內容,chip明明就打在板子上的,怎麼可以用燒錄器燒錄
?
**********************************************************************
感謝您的來信。
 
   關於您的問題,為您說明如下:
1. 目前我們所採用的方式是以燒錄器進行燒錄,另加轉接器直接對
    Flash進行燒錄。
2. 如果您想更改NET-Start! bootloader為自己的bootloader,建議
   您利用copy的指令,下載至0x01800000的位址,由於在0的位址
   已為我們所使用,並已經remap過,所以不建議您使用此位置。
   在您copy至0x01800000後,等候約30秒的時間後重新啟動(請注
   意,由於您自行更動bootloader,可能導致NET-Start! 無法正常
   啟動,後果恐怕要請您自行重新燒錄或退回給我們由我們來作)。
 
    如果您有任何問題,歡迎來信給我,我會儘快為您服務。
 
 
    謝謝,
***********************************************************************






也謝謝各位熱心的回答我的問題!!
作者 : seanchang(H) Assembly卓越專家貼文超過1000則
[ 貼文 1200 | 人氣 773 | 評價 3240 | 評價/貼文 2.7 | 送出評價 43 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/30 上午 09:54:08

>>感謝您的來信。
>
> 關於您的問題,為您說明如下:
>1. 目前我們所採用的方式是以燒錄器進行燒錄,另加轉接器直接對
> Flash進行燒錄。
>2. 如果您想更改NET-Start! bootloader為自己的bootloader,建議
> 您利用copy的指令,下載至0x01800000的位址,由於在0的位址
> 已為我們所使用,並已經remap過,所以不建議您使用此位置。
> 在您copy至0x01800000後,等候約30秒的時間後重新啟動(請注
> 意,由於您自行更動bootloader,可能導致NET-Start! 無法正常
> 啟動,後果恐怕要請您自行重新燒錄或退回給我們由我們來作)。
> 謝謝,
>**************************************************************
如果這樣的話,總該提供方法給User hook exception才對!
作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/6/30 下午 09:54:52

>如果這樣的話,總該提供方法給User hook exception才對!

====================================================

翻遍了產品所附的光碟的所有文件,就是沒有提供hook exception的方法.
打電話去問,廠商也說不會提供任何方法或介面給使用者處理exception,所以,
很麻煩...
作者 : nilhc(apple1)
[ 貼文 29 | 人氣 1470 | 評價 160 | 評價/貼文 5.52 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人yyj註記此篇回應為很有道理 2004/7/6 下午 12:56:39
>要動 vector有一個辦法,就是先把 vector放在 code裡面,在自己的程式開始執行的時候,把向量表copy到 0這個位置去.而不是要靠 boot loader幫你搬,why?
>假設你是透過RS232來下載程式,程式還沒下載完成,RS232的ISR怎麼辦?總不能被破壞吧?
>這在你的程式要燒進ROM的時候,啟動程式要做的事情一樣.為什麼?原則上 boot loader完成載入動作後跳到user的程式,基本上任務已經完成(有提供system service為例外,說明書會說,而且 boot loader應該會負責 redirect exception vector到別的位置去)所有在RAM的程式,跟使用的記憶體都是可以移除的.
>由於ARM的各個exception的stack pointer是分開的.你的程式除了更換 vector外,
>切記還必須要把所有的stack pointer設定好.
>
ARM原理與實作這本書有很好的範例 ex8_2.(只是原作似乎有些問題)
只要將 ld_script 做些修正, 就可以試試無痛向量中斷實驗
我的環境是 cygwin & arm-elf-gcc toolchain

首先要了解 netstart 開機後bootload remap memory 的結果
自己寫的程式必須將起始位置設在 0x10000 的位置
因此中斷向量表必須先委身在 資料段的後段
等程式進入0x10000 後再利用memcpy 將中斷向量般回 0x0 的地方

ex8_ld:
// 注意 AT 的 keyword 簡單的說就是 runtime 時程式碼以 0x0 為 running 的位址
// 但產生 elf or rom file 時程式請放在 _etext, 也就是 rodata 後
// 如此一來就解決了另一位朋友說的計算麻煩的問題了
SECTIONS
{
    .vect 0x0: AT (_etext) {
     *(vect)
     }
     .text 0x10000: {
     _ftext= .;
     *( .init )
     ...
     ....
     .rodata : {
     *(.rodata)
     etext = .;
     _etext = .; // 提供 _etext 的 symbol 方便 main 程式使用
     }
     . = ALIGN( 16);
     _vect = .;
     . = . + SIZEOF(.vect); //預留足夠的空間來放 vect
     . = ALIGN( 16 );
 ...
 ...


main() {
  extern char _etext;
   chap *p;
   p = &_etext;
   memcpy(0,p,0x60); //將中斷向量搬回0x0
...
}

作者 : yyj(羅伊)
[ 貼文 38 | 人氣 1951 | 評價 100 | 評價/貼文 2.63 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/7/8 上午 08:13:58

>ARM原理與實作這本書有很好的範例 ex8_2.(只是原作似乎有些問題)
>只要將 ld_script 做些修正, 就可以試試無痛向量中斷實驗
>我的環境是 cygwin & arm-elf-gcc toolchain
>
>首先要了解 netstart 開機後bootload remap memory 的結果
>自己寫的程式必須將起始位置設在 0x10000 的位置
>因此中斷向量表必須先委身在 資料段的後段
>等程式進入0x10000 後再利用memcpy 將中斷向量般回 0x0 的地方
>
>ex8_ld:
>// 注意 AT 的 keyword 簡單的說就是 runtime 時程式碼以 0x0 為 running 的位址
>// 但產生 elf or rom file 時程式請放在 _etext, 也就是 rodata 後
>// 如此一來就解決了另一位朋友說的計算麻煩的問題了
>SECTIONS
>{
> .vect 0x0: AT (_etext) {
> *(vect)
> }
> .text 0x10000: {
> _ftext= .;
> *( .init )
> ...
> ....
> .rodata : {
> *(.rodata)
> etext = .;
> _etext = .; // 提供 _etext 的 symbol 方便 main 程式使用
> }
> . = ALIGN( 16);
> _vect = .;
> . = . + SIZEOF(.vect); //預留足夠的空間來放 vect
> . = ALIGN( 16 );
> ...
> ...
>
>
>main() {
> extern char _etext;
> chap *p;
> p = &_etext;
> memcpy(0,p,0x60); //將中斷向量搬回0x0
>...
>}
>
====================================================
嗯!
很有道理,雖然我還沒有驗證,不過這是一個好方向,我會把你說的那本書好好研究一下.
謝謝你的協助.
 板主 : yuan
 > 嵌入式系統(Embedded System) - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 嵌入式系統(Embedded System) - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
嵌入式系統(Embedded System)
1 kting 770 
2 Lingb 400 
3 sazabi 400 
4 Huah 390 
5 hawkeye 380 
6 H 360 
7 yuan 350 
8 Kenny 310 
9 ozzy 290 
10 富伯 280 
嵌入式系統(Embedded System)
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.09375