娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

S5PV210開發 -- Nand和e-MMC區別以及系統更新

發布者:量子心跳最新更新時間:2019-08-30 來源: eefocus關鍵字:S5PV210  Nand  e-MMC  系統更新 手機看文章 掃描二維碼
隨時隨地手機看文章

通過上兩篇文章我們完成了對開發板的燒寫,接下來聊一下 Nand 和 iNand。為什么要聊這個呢?


我購買的開發板  Flash:支持512MB nand flash/4GB inand 可選,標配 4GB inand;它們除了結構上的不同,還跟系統更新有關啦,上兩篇因為我的開發板是 iNand 所以一般用的是 fastboot 更新的。而 Nand 還可以通過 read、write、erase 指令進行更新。


前面有寫過一篇 Nand 的文章,參看:S5PV210開發 -- nand 詳解


一、iNand 詳解

 

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


個人思考:


下面介紹 iNand 部分的內容,我不知道出處是何處,我網上搜索到 iNand 相關的知識基本都是這些。


我有點懵逼了,iNand 是 Sandisk 公司符合 eMMC 協議的一種芯片系列名稱。


可以查看  sandisk 閃迪官網


iNAND 嵌入式存儲解決方案適用于 e.MMC 和 e.MCP 接口,可為智能手機、平板電腦和其他移動設備提供更快的系統響應能力、更出色的多任務處理性能,以及更長的電池壽命。高容量、高性能的 iNAND 嵌入式閃存驅動器是向終端用戶提供領先的成像和應用性能的基礎。


而我看了有下我買的開發板處 e-MMC 芯片型號是 THGBMBG5D1KBAIT


芯片手冊下載:THGBMBG5D1KBAIL datasheet


可以查看  東芝官網


針對那些對大容量MLC NAND閃存感興趣的用戶,我們推薦封裝內帶有集成控制器芯片的NAND閃存產品。

在使用不帶集成控制器芯片的NAND存儲器解決方案時,用戶需要將壞塊管理、錯誤代碼校正(ECC)、邏輯-物理地址轉換和磨損均衡(一種在存儲器陣列內平均分布重寫次數的技術)等處理操作嵌入存儲系統中。

因此,我們推薦在同一個封裝內加入集成控制器芯片的NAND閃存解決方案。

由于在技術規格和ECC要求上的變化,幾乎每一代工藝的NAND閃存在操作方面都會隨之發生相應的變化,特別是對MLC NAND閃存而言。東芝專門針對每一代NAND閃存開發的集成控制器芯片能夠為這些必要操作提供解決方案。使用帶有集成控制器芯片的NAND閃存解決方案,可以更輕松地構建主機內存應用系統。


東芝提供 e-MMC 和 UFS,這是集成控制器于同一封裝的一系列大容量 NAND 閃存。

這些NAND解決方案提供了ECC和其它控制功能,這是東芝所優化的應用于每一代NAND的技術。

eMMC 和UFS 降低了主機處理器的工作量,簡化了產品開發,縮短了上市時間,增加了存儲器產品的易用性。


存儲卡接口:e-MMC

e-MMC 是指一系列具有ECC、耗損均衡和壞塊管理等控制功能的NAND閃存(NAND)。e-MMC 也提供符合JEDEC/MMCA版本 4.5/5.0/5.1的高速存儲卡接口,從而消除了用戶對于直接控制NAND的需求。所以,e-MMC 可輕松用作嵌入式多媒體卡(MMC)存儲器。

UFS

東芝具有集成控制器的NAND閃存(NAND)能提供糾錯、耗損均衡、壞塊管理等功能。它們具有符合JEDEC/UFS版本2.1的接口,從而消除了用戶對NAND特定控制的要求。這簡化了閃存存儲在嵌入式應用中的集成。


說這么多有啥用啊,其實我就想這些開發板用戶手冊上說,開發板是 nand flash 平臺還是 inand 平臺


這種說法是不是不太恰當呢?首先開發板上用的根本不是 iNand 系列的芯片。


Flash:支持512MB nand flash/4GB inand 可選,標配 4GB inand;


這句話也是錯誤的吧,4GB 的是東芝的 THGBMBG5D1KBAIT 型號的 e-MMC 芯片,所以說 e-MMC 會不會好些。


直到我看了官網提供的核心板原理圖,才了解為什么它們說 iNand 了。

型號是 SDIN5C2 即 SanDisk 公司的 iNAND 支持 e-MMC 4 引導操作模式。


THGBMBG5D1KBAIT 和 SDIN5C2 封裝是一樣,是可替代的。


而上面所謂的 iNand 應該就是基于 SDIN5C2 來說的。


開發板手冊上的叫法沒有改回來,不過還是顯得不太嚴謹。


原理圖和相關芯片手冊,下載:相關資料


最后需要謹記,下面介紹的 iNand 是 Sandisk 公司符合 eMMC 協議的一種芯片系列名稱。


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


我們先看看 iNand 


參看:iNAND Technical Overview


參看:S5PV210系列 (裸機十五)之 iNand


(1)iNand 介紹

iNand/eMMC/SDCard/MMCCard的關聯

(1)最早出現的是 MMC 卡,卡片式結構,按照 MMC 協議設計。(相較于NandFlash芯片來說,MMC卡 有 2 個優勢:第一是卡片化,便于拆裝;第二是統一了協議接口,兼容性好。)

(2)后來出現 SD卡,兼容 MMC 協議。SD卡 較 MMC 有一些改進,譬如寫保護、速率、容量等。

(3)SD卡 遵守 SD 協議,有多個版本。多個版本之間向前兼容。

(4)iNand/eMMC 在 SD 卡的基礎上發展起來,較 SD卡 的區別就是將 SD卡 芯片化了(解決卡的接觸不良問題,便于設備迷你化)。

(5)iNand 和 eMMC 的關聯:eMMC 是協議,iNand 是 Sandisk 公司符合 eMMC 協議的一種芯片系列名稱。


iNand/eMMC的結構框圖及其與NandFlash的區別

(1) iNand 內部也是由存儲系統和接口電路構成(和 Nand 結構特性類似,不同之處在于接口電路功能不同)。

(2) iNand 的接口電路挺復雜,功能很健全。譬如: 

第一,提供 eMMC 接口協議,和 SoC 的 eMMC 接口控制器通信對接。 

第二,提供塊的 ECC 校驗相關的邏輯,也就是說 iNand 本身自己完成存儲系統的 ECC 功能,SoC 使用 iNand 時自己不用寫代碼來進行 ECC 相關操作,大大簡化了 SoC 的編程難度。( NandFlash 分 2 種:SLC 和 MLC,SLC 更穩定,但是容量小價格高;MLC 容易出錯,但是容量大價格低) 

第三,iNand 芯片內部使用 MLC Nand 顆粒,所以性價比很高。 

第四,iNand 接口電路還提供了 cache 機制,所以 inand 的操作速度很快。


iNand / eMMC 的物理接口和 SD 卡物理接口的對比

(1) S5PV210 芯片本身支持 4 通道的 SD/MMC,在 X210 中實際是在 SD/MMC0通道接了 iNand 芯片,而 SD/MMC2 接了 SD 卡( SD/MMC3 也接了 SD卡 )。


(2)對比 inand 和 SD卡 接線,發現:這兩個接線幾乎是一樣的,唯一的區別就是SD卡 IO 線有 4 根,而 iNand 的 IO 線有 8 根。


(3)這個告訴我們,我們在實際操作 iNand芯片 時和操作 SD卡 時幾乎是一樣的(物理接線幾乎一樣,軟件操作協議幾乎一樣)。


結論:

 

iNand / eMMC 其實就是芯片化的 SD/MMC 卡,軟件操作和 SD 卡相同。 


分析 iNand 芯片的操作代碼時,其實就是以前的 SD卡 的操作代碼。一些細節的區別就是為了區分各種不同版本的 SD卡、iNand 的細節差異。



(2)SD卡/iNand操作

這部分可以參看:SD卡物理層規范簡化版  SD 卡部分這里只做了解,以后還會詳講的。


硬件接口:DATA、CLK、CMD

(1) iNand 的 IO 線有 8 根,支持 1、4、8 線并行傳輸模式;SD 卡 IO 線有 4 根,支持 1、4 線并行傳輸模式。



(2) CMD 線用來傳輸命令、CLK 線用來傳輸時鐘信號。


(3)接口有 CLK 線,工作時主機 SoC 通過 CLK 線傳輸時鐘信號給 SD卡/iNand 芯片,說明:SD/iNand 是同步的,SD/iNand 的工作速率是由主機給它的CLK頻率決定的。


命令響應的操作模式

 


(1) SD 協議事先定義了很多標準命令(CMD0、CMD1·····),每個命令都有它的作用和使用條件和對應的響應。SD 卡工作的時候就是一個一個的命令周期組合起來的,在一個命令周期中,主機先發送 CMD 給 SD 卡,然后 SD卡 解析這個命令并且執行這個命令,然后 SD 卡根據結果回發給主機 SoC 一個響應。(有些命令是不需要響應的,這時 SD 卡不會給主機回發響應,主機也不用等待響應)。標準的命令+響應的周期中,主機發完一個命令后應該等待 SD卡 的響應而不是接著發下一條命令。


 

SD/iNand的體系結構圖

(1) SD 卡內部有一個接口控制器,這個控制器類似于一個單片機,這個單片機的程序功能就是通過 CMD 線接收外部主機 SoC 發給 SD卡 的命令碼,然后執行這個命令并且回發響應給主機 SoC。這個單片機處理命令及回發響應遵循的就是SD 協議。這個單片機同時可以控制 SD卡 內部的存儲單元,可以讀寫存儲單元。

SD / iNand 的寄存器(重點是 RCA 寄存器)

 


(1)注意這里說的是 SD卡 內部的寄存器,而不是主機 SoC 的 SD 控制器的寄存器。(很多外置芯片內部都是有寄存器的,這些寄存器可以按照一定的規則訪問,訪問這些寄存器可以得知芯片的一些信息)。

(2) RCA(relative address,相對地址寄存器)。我們在訪問 SD卡 時,實際上 SD卡內部每個存儲單元的地址沒有絕對數字,都是使用相對地址。相對地址由 SD卡自己決定的,存放在 RCA 寄存器中。


SoC 的 SD/MMC/iNand 控制器簡介

 

(1)不同的 SoC 可能在 SD/MMC/iNand 等支持方面有差異,但是如果支持都是通過內部提供 SD 控制器來支持的。



(2)S5PV210 的 SD卡 控制器在 Section8.7 部分


(2)SD/iNand代碼實戰分析

 


// SD協議規定的命令碼   

#define CMD0    0

#define CMD1    1

#define CMD2    2   

#define CMD3    3   

#define CMD6    6

#define CMD7    7

#define CMD8    8

#define CMD9    9

#define CMD13   13

#define CMD16   16

#define CMD17   17

#define CMD18   18

#define CMD23   23  

#define CMD24   24

#define CMD25   25  

#define CMD32   32  

#define CMD33   33  

#define CMD38   38  

#define CMD41   41  

#define CMD51   51

#define CMD55   55  

 

// 卡類型

#define UNUSABLE        0

#define SD_V1           1   

#define SD_V2           2   

#define SD_HC           3

#define MMC             4

 

// 卡狀態

#define CARD_IDLE       0           // 空閑態

#define CARD_READY      1           // 準備好

#define CARD_IDENT      2

#define CARD_STBY       3

#define CARD_TRAN       4

#define CARD_DATA       5

#define CARD_RCV        6

#define CARD_PRG        7           // 卡編程狀態

#define CARD_DIS        8           // 斷開連接

 

// 卡回復類型    

#define CMD_RESP_NONE   0           // 無回復

#define CMD_RESP_R1     1

#define CMD_RESP_R2     2

#define CMD_RESP_R3     3

#define CMD_RESP_R4     4

#define CMD_RESP_R5     5

#define CMD_RESP_R6     6

#define CMD_RESP_R7     7

#define CMD_RESP_R1B    8

命令碼 CMD 和 ACMD



(1) SD卡 工作在命令 + 響應的模式下。

(2) SD協議 的命令分 2 種:CMDx 和 ACMDx。CMD 是單命令命令,就是單獨發一個 CMD 即可表示一個意思。ACMD 是一種擴展,就是發 2 個 CMD 加起來表示一個意思。可以認為 ACMDx = CMDy + CMDz( y 一般是55)


卡類型識別 SD or MMC?

 


(1) MMC 協議、SD 協議、eMMC 協議本身是一脈相承的,所以造成了一定的兼容性,所以當我們 SoC 控制器工作時連接到 SoC 上的可能是一個 MMC 卡、也可能是 SD 卡、也可能是 iNand 芯片。主機 SoC 需要去識別這個卡到底是什么版本的卡

(2) SoC 如何區分卡種類?因為不同版本的卡內部協議不同的,所以對卡識別命令的響應也是不同的。SoC 通過發送一些命令、聽取響應就可以根據不同的響應判定卡的版本。


卡狀態

 

(1) SD卡 內部的接口控制器類似于一個單片機,這個單片機其實是一個狀態機。所以 SD卡 任何時候都屬于某一種狀態(空閑狀態、準備好狀態、讀寫狀態、出錯狀態····都是事先定義好的),在這種狀態下能夠接受的命令是一定的,接受到命令之后執行一定的操作然后根據操作結果會跳轉為其他狀態。如果主機發過來的命令和當前狀態不符狀態機就不響應,如果收到命令和當前狀態相符就會執行相應操作,執行完之后根據結果跳轉為其他狀態。


卡回復類型

(1)一般來說,SD 卡的命令都屬于:命令 + 響應的模式。也有極少數的 SD 卡命令是不需要回復的。

(2)卡回復有 R1、R7、R1B 等 8 種類型,每種卡回復類型都有自己的解析規則。然后卡在特定狀態下響應特定命令時有可能回復哪種響應都是 SD 協議事先規定好的,詳細細節要查閱協議文檔。


linux內核風格的寄存器定義

(1)定義一個基地址,然后定義要訪問的寄存器和基地址之間的偏移量,在最終訪問寄存器時地址就等于基地址+偏移量。



(2)提供的代碼中宏定義是不完整的,很多宏定義只能從字面意思來理解對應,無法通過語法完全獲得


SD/iNand相關的GPIO初始化

 


#if (HSMMC_NUM == 0)

#define HSMMC_BASE  (0xEB000000)

#elif (HSMMC_NUM == 1)

#define HSMMC_BASE  (0xEB100000)

#elif (HSMMC_NUM == 2)

#define HSMMC_BASE  (0xEB200000)

#elif (HSMMC_NUM == 3)

#define HSMMC_BASE  (0xEB300000)

#else

#error "Configure HSMMC: HSMMC0 ~ HSMM3(0 ~ 3)"

#endif

SD/iNand的時鐘設置

(1)SD卡本身工作需要時鐘,但是自己又沒有時鐘發生單元,依靠主機SoC的控制器通過SD接口中的CLK線傳一個時鐘過來給SD卡內部使用。所以主機SD卡控制器先初始化好自己的時鐘,然后將自己的時鐘傳給SD卡。

(2)因為此時剛開始和SD卡通信,主機不清楚SD卡屬于哪個版本(高版本和低版本的SD卡的讀寫速率不同,高版本的可以工作在低版本的速率下,低版本的SD卡不能工作在高版本速率下),所以先給SD卡發400KHz的低速率時鐘,SD卡拿到這個時鐘后就能工作了。然后在后面和SD卡進行進一步通信時去識別SD卡的版本號,識別后再根據SD卡的版本進一步給它更合適的時鐘。


static void Hsmmc_ClockOn(uint8_t On)

{

    uint32_t Timeout;

    if (On) {

        __REGw(HSMMC_BASE+CLKCON_OFFSET) |= (1<<2); // sd時鐘使能

        Timeout = 1000; // Wait max 10 ms

        while (!(__REGw(HSMMC_BASE+CLKCON_OFFSET) & (1<<3))) {

            // 等待SD輸出時鐘穩定

            if (Timeout == 0) {

                return;

            }

            Timeout--;

            Delay_us(10);

        }

    } else {

        __REGw(HSMMC_BASE+CLKCON_OFFSET) &= ~(1<<2); // sd時鐘禁止

    }

}

 

static void Hsmmc_SetClock(uint32_t Clock)

{

    uint32_t Temp;

    uint32_t Timeout;

    uint32_t i;

    Hsmmc_ClockOn(0); // 關閉時鐘   

    Temp = __REG(HSMMC_BASE+CONTROL2_OFFSET);

    // Set SCLK_MMC(48M) from SYSCON as a clock source  

    Temp = (Temp & (~(3<<4))) | (2<<4);

    Temp |= (1u<<31) | (1u<<30) | (1<<8);

    if (Clock <= 500000) {

        Temp &= ~((1<<14) | (1<<15));

        __REG(HSMMC_BASE+CONTROL3_OFFSET) = 0;

    } else {

        Temp |= ((1<<14) | (1<<15));

        __REG(HSMMC_BASE+CONTROL3_OFFSET) = (1u<<31) | (1<<23);

    }

    __REG(HSMMC_BASE+CONTROL2_OFFSET) = Temp;

 

    for (i=0; i<=8; i++) {

        if (Clock >= (48000000/(1<            break;

        }

    }

    Temp = ((1<    Temp |= (1<<0); // Internal Clock Enable

    __REGw(HSMMC_BASE+CLKCON_OFFSET) = Temp;

    Timeout = 1000; // Wait max 10 ms

    while (!(__REGw(HSMMC_BASE+CLKCON_OFFSET) & (1<<1))) {

[1] [2] [3]
關鍵字:S5PV210  Nand  e-MMC  系統更新 引用地址:S5PV210開發 -- Nand和e-MMC區別以及系統更新

上一篇:S5PV210開發 -- 通過 DNW、fastboot 燒寫
下一篇:S5PV210開發 -- 啟動流程

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 江西省| 华容县| 阳高县| 邢台县| 塔城市| 邵阳市| 浮山县| 巫山县| 寿宁县| 望奎县| 定南县| 南岸区| 青阳县| 万州区| 公安县| 岳阳县| 隆昌县| 儋州市| 黄龙县| 华池县| 庄浪县| 白朗县| 陇川县| 札达县| 田阳县| 郧西县| 南乐县| 泰顺县| 晋江市| 喀喇沁旗| 富锦市| 彰武县| 承德市| 板桥市| 工布江达县| 来凤县| 锦州市| 延庆县| 安西县| 苏州市| 屯门区|