嵌入式之存儲總結(從C51、STM32、S3C2440入手)(二)

續:
接着總結:

二、C51、STM32和S3C2440的存儲設備

  對於C51來說,就像上一篇說到的一樣。基本的情況是:其內部有RAM、ROM還可以擴展外部的RAM和ROM。但是還不止這些C51芯片還是設計的挺複雜的。對STC90C51系列單片機內部還一定空間的的E2PROM(2K左右),可以保存一些需要在應用過程中修改並且掉電不丟失的參數數據。這種機制是使用IAP技術實現的。
  對於STM32來說,其內部含有SRAM和一定容量的FLASH。還可以外接SRAM和Flash等等。
  對於S3C2440來說,其內部含有4K的SRAM,又叫做stepingstone。當然,其可以外接SDRAM、NorFlashNandFlash。

三、C51、STM32和S3C2440啓動方式①

  對於C51來說,上電一復位之後CPU就從0地址處開始執行程序,(這裏的0地址指的是內部ROM的地址),然後,一般情況下啓動程序(就是start.s,一般由編譯器添加)把程序變量複製到SRAM中,開始執行程序。
  對於STM32來說,其啓動方式可以由BOOT引腳進行設置。總共有三種方式,如下圖所示:
STM32啓動方式
  對於內部Flash啓動,一般情況下,也是由啓動程序(start.S)將數據部分複製到SRAM中,代碼部分保存在Flash中, 然後開始執行程序。
  對於內部SRAM啓動,這裏主要是調試模式,一般通過仿真器下載到SRAM中,進行調試。畢竟,SRAM掉電後,裏面啥都沒了。
  對於系統存儲器::裏面存的是 ST出廠時燒 寫 好 的 isp 自 舉 程 序 ( Bootloader),用戶無法改動。串口下載的時候需要用到這部分程序。

  對於S3C2440來說,其主要有以下兩種啓動方式:
S3C2440啓動方式

  對於從NorFlash啓動,由於NorFLash可以直接在片上運行,所以可以直接從NorFlash啓動即程序直接下載到NorFlash中。當然這裏一般會把程序運行的數據部分拷貝到SRAM或者SDRAM中;也可以把全部的程序拷貝到SDRAM中,然後跳到SDRAM中繼續執行。

  對於從NandFlash啓動,本質上還是從SRAM中啓動。(NandFlash不具有片上直接運行的功能)因爲系統在NandFlash啓動時,會自動從NandFlash中複製前4字節的內容進入系統內部的SRAM中,然後從SRAM中執行程序。這前面的4KB(注意只有4KB),一般來說,需要把整個程序複製到SDRAM中,然後跳到SDRAM中執行。

註釋:①問你一個問題:一般來說,單片機程序從哪開始執行?
啊,從main函數開始執行。哈哈,那你只能算是單片機將將入門。
嗯,從下載到ROM中的第一條指令開始執行。嘿嘿,入門許久了。
哦,從廠家固化的程序開始執行。 哎呦,你很棒哦。

  一般來說,復位之後,程序開始執行黨的第一條指令都是廠家固化在芯片內部存儲區的一段代碼。根據不同的功能,這代碼有不同的名字。C51和STM32叫做ISP檢測程序,主要用來下載程序之用。S3C2440叫做RBL(ROM boot loader),它是SOC上電後開始運行的地方,它會判斷是哪種啓動方式,如果是nand啓動,就會從nand的起始地址處讀取UBL(user boot loader)並且複製到ARM的內存裏面,也就是上面說的片內SRAM。(以前我一直以爲是硬件自動加載的,原來還是軟件部分加載的UBL)

四、其他

  首先,說說中斷向量表。
  一般來說,中斷向量表都是固定的地址,當發生固定的中斷之後,就會跳到對應的向量地址執行程序。(這個地址作用相當於一個佔位符,它會跳轉到具體的中斷程序中)。C51和S3C2440都是這種情況。而STM32基於的Cortex-M3中有一個向量偏移寄存器,可以把向量錶轉移到其他地址,這樣更加靈活。

  然後,說說編譯過程中,鏈接的順序。
  一般來說,鏈接的順序(可以說是鏈接腳本的書寫)決定了不同代碼段在映像文件中的位置,也決定了下載到Flash存儲器中的前後位置。一般來說,這個前後位置沒有太大的影響。但是對於S3C2440NandFlash這種啓動方式來說就需要注意一下。
具體來說,如果程序過大,超過了4K大小,就需要使用NandFlash的啓動方式。在Start.S啓動文件中需要進行文件的重定位,簡單來說需要把NandFlash中的全部程序代碼拷貝到SDRAM中。而這段進行拷貝的代碼則必須位於4K之內(而且必須是位置無關碼,具體原因請自行百度),因爲系統只有這樣才能把這段進行拷貝的代碼複製到SRAM中,從SRAM中執行。如果鏈接時把這段代碼的加載地址放在了4K之外,那就沒法執行了,整個程序也就運行不了了。

  最後再來說說存儲E2PROM、NandFlash和NorFlash。
  E2PROM,即電可擦除只讀存儲器,其具有較高的可靠性,可以保存100年,可以擦除100w次,但是電路複雜,成本也高,所以容量相對較小(目前的EEPROM都是幾十千字節到幾百千字節的,絕少有超過512K的。),是比較傳統的一種ROM,現在常被用來作爲存儲諸如實時時鐘,數字電位計,數字溫度傳感器等可能需要少量空間來校準信息或在斷電時需要保存的其他數據。
  Flash包括NandFlash和NorFlash,它們從廣義上講也屬於EEPROM,因爲它也是電擦除的rom。但是爲了區別於一般的按字節爲單位的擦寫的EEPROM,我們都叫它flash。flash做的改進就是擦除時不再以字節爲單位,而是以塊爲單位,一次簡化了電路,數據密度更高,降低了成本。上M的rom一般都是flash。
  對於NorFlash,它的數據線和地址線分開,可以實現ram一樣的隨機尋址功能,可以讀取任何一個字節,但是擦除仍要按塊來擦。其容量也較小,大都是2~12M。
  nand flash同樣是按塊擦除,但是數據線和地址線複用,不能利用地址線隨機尋址。讀取只能按頁來讀取。它內部電路更簡單,因此數據密度大,體積小,成本也低。因此大容量的flash都是nand型的。
  需要注意一點的是對於Flash來說,由於其電氣特性,會出現一定位反轉和的壞塊(NorFlash的出錯的概率要遠小於NandFLash),需要由額外的措施(ECC等)來檢測和糾正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章