• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習慣原本生活的人不容易改變,就算現狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預料,人們需要更細心的觀察別人,要隨時注意才能保護別人,因為他們未必知道自己要什么·····
            好久沒動開發板了,終于把研考完了,可以安心的做自己的實驗了,但發現放下手頭關于tq2440的實驗兩個多月,發現生疏了許多,許多問題都要想一下才能記起來是什么原理,真得抓緊時間好好弄了。

            又從uboot開始弄,以前移植了uboot1.3.1,由于太多匆忙,沒有過多的注重細節,今天發現了一個以前忽略的問題,就是開發板自己判斷是從何種flash介質啟動的問題,首先說一下為什么要判斷是哪種flash介質啟動,因為這樣就沒有必要區分nor boot還是nand boot的bin文件了,bin文件燒到nor和nand都可以正常啟動開發板。

            在網上看了下別人關于nor boot或nand boot 的文章,發現Tekkaman Ninja寫的文章非常好,很值得推薦,附上地址,以便以后查找:http://blog.chinaunix.net/u1/34474/showart.php?id=2085212

            下面來分析下天嵌公司的uboot,據Tekkaman Ninja說,天嵌的uboot是從openJTAG的uboot 借鑒過來的,這個我們姑且不管他。貼下天嵌TQ2440的uboot中關于啟動判斷的代碼:

            int bBootFrmNORFlash(void)
            {
            volatile unsigned int *pdw = (volatile unsigned int *)0;
            unsigned int dwVal;

            dwVal = *pdw;
            *pdw = 0x12345678;
            if (*pdw != 0x12345678)
            {
            return 1;
            }
            else
            {
            *pdw = dwVal;
            return 0;
            }
            }

            這段代碼的思想是這樣的,無論是從NOR Flash還是從NAND Flash啟動,地址0處為指令"b Reset", 機器碼為0xEA00000B,對于從NAND Flash啟動的情況,其開始4KB的代碼會復制到CPU內部4K內存中,對于從NOR Flash啟動的情況,NOR Flash的開始地址即為0。對于NOR Flash,必須通過一定的命令序列才能寫數據,所以可以根據這點差別來分辨是從NAND Flash還是NOR Flash啟動:向地址0寫入一個數據,然后讀出來,如果沒有改變的話就是NOR Flash。

            我們在深入的分析下,首先看下nand boot 和nor boot 時物理地址分配情況:




            從NAND閃存啟動U-BOOT的設計思路

            如果s3c2440被配置成從NAND閃存啟動,上電后,s3c2440的NAND閃存控制器會自動把NAND閃存 中的前4K數據搬移到內部RAM中, 并把0x00000000設置為內部RAM的起始地址, CPU從內部RAM的0x00000000位置開始啟動。因此要把最核心的啟動程序放在NAND閃存的前4K中。

            當nor boot時,0x0000_0000是nor flash的起始地址,用語句*pdw = 0x12345678; 向0x0000_0000處寫0x12345678,是沒用的,因為對于NOR Flash,必須通過一定的命令序列才能寫數據,所以*pdw中存的數據仍然是"b Reset",但當nand flash啟動時,cpu內部的4KBbootSRAM被映射到0x0000_0000開始的地址處,norflash這時無效了,這時用語句*pdw = 0x12345678; 向0x0000_0000處寫0x12345678時,0x12345678會被寫入,因為這是對內存的操作,不需要指令序列等,所以一旦發現寫入和讀出 的數據一致時,則可判斷是nand boot,這時一定要把0x0000_0000處的數據還原,用*pdw = dwVal; 這句。

            明天看看,得重新移植uboot了,好好研究研究,uboot很高深啊!!

            http://blog.sina.com.cn/s/blog_52009a100100hcv1.html

            posted on 2010-08-09 14:04 小果子 閱讀(1265) 評論(0)  編輯 收藏 引用 所屬分類: Linux
            中文字幕热久久久久久久| 欧美伊人久久大香线蕉综合69| 久久久久久久亚洲精品| 久久天堂电影网| 久久综合久久综合久久综合| 国产精品美女久久久久久2018| 伊人久久久AV老熟妇色| AV无码久久久久不卡蜜桃| 99精品国产免费久久久久久下载| 久久99热这里只频精品6| 亚洲中文字幕无码久久精品1| 亚洲色欲久久久综合网| 久久久一本精品99久久精品88| 久久精品亚洲精品国产色婷| 精品999久久久久久中文字幕| 久久这里只精品国产99热| 精品久久人人爽天天玩人人妻| 久久这里只有精品视频99| 国内高清久久久久久| 99久久99久久久精品齐齐| 国产精品无码久久久久| 久久无码AV一区二区三区| 亚洲色欲久久久综合网| 天天综合久久久网| 久久亚洲精品无码VA大香大香| 久久久精品2019免费观看| 久久精品国产WWW456C0M| 亚洲精品乱码久久久久久| 久久美女网站免费| 狠狠色丁香久久婷婷综合_中| 国产成年无码久久久久毛片| 久久乐国产精品亚洲综合| 日产精品久久久久久久性色| 精品国产综合区久久久久久 | 久久丝袜精品中文字幕| 精品人妻伦九区久久AAA片69| 久久久久久久综合日本亚洲 | 99精品国产免费久久久久久下载| 国产高潮国产高潮久久久| 久久一区二区三区免费| 久久久久国产精品|