在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SPI flash是什么,關(guān)于SPI FLASH的讀寫(xiě)問(wèn)題

ss ? 作者:工程師譚軍 ? 2018-09-18 14:38 ? 次閱讀

本文主要是關(guān)于SPI flash的相關(guān)介紹,并著重對(duì)SPI flash的原理及其讀寫(xiě)進(jìn)行了相近的闡述。

SPI flash

SPI一種通信接口。那么嚴(yán)格的來(lái)說(shuō)SPI Flash是一種使用SPI通信的Flash,即,可能指NOR也可能是NAND。但現(xiàn)在大部分情況默認(rèn)下人們說(shuō)的SPI Flash指的是SPI NorFlash。早期Norflash的接口是parallel的形式,即把數(shù)據(jù)線和地址線并排與IC的管腳連接。但是后來(lái)發(fā)現(xiàn)不同容量的Norflash不能硬件上兼容(數(shù)據(jù)線和地址線的數(shù)量不一樣),并且封裝比較大,占用了較大的PCB板位置,所以后來(lái)逐漸被SPI(串行接口)Norflash所取代。同時(shí)不同容量的SPI Norflash管腳也兼容封裝也更小。,至于現(xiàn)在很多人說(shuō)起NOR flash直接都以SPI flash來(lái)代稱。

SPI flash是什么,關(guān)于SPI FLASH的讀寫(xiě)問(wèn)題

NorFlash根據(jù)數(shù)據(jù)傳輸?shù)奈粩?shù)可以分為并行(Parallel,即地址線和數(shù)據(jù)線直接和處理器相連)NorFlash和串行(SPI,即通過(guò)SPI接口和處理器相連)NorFlash;區(qū)別主要就是:1、SPI NorFlash每次傳輸一bit位的數(shù)據(jù),parallel連接的NorFlash每次傳輸多個(gè)bit位的數(shù)據(jù)(有x8和x16bit兩種); 2、SPI NorFlash比parallel便宜,接口簡(jiǎn)單點(diǎn),但速度慢。

NandFlash是地址數(shù)據(jù)線復(fù)用的方式,接口標(biāo)準(zhǔn)統(tǒng)一(x8bit和x16bit),所以不同容量再兼容性上基本沒(méi)什么問(wèn)題。但是目前對(duì)產(chǎn)品的需求越來(lái)越小型化以及成本要求也越來(lái)越高,所以SPI NandFlash漸漸成為主流,并且采用SPI NANDFlash方案,主控也可以不需要傳統(tǒng)NAND控制器,只需要有SPI接口接口操作訪問(wèn),從而降低成本。另外SPI NandFlash封裝比傳統(tǒng)的封裝也小很多,故節(jié)省了PCB板的空間。

今天主要說(shuō)下SPI NorFlash。

二、有毛用啊

節(jié)省成本,減小封裝,存儲(chǔ)數(shù)據(jù)。

三、怎么用啊

怎么用說(shuō)白了對(duì)于Flash就是讀寫(xiě)擦,也就是實(shí)現(xiàn)flash的驅(qū)動(dòng)。先簡(jiǎn)單了解下spi flash的物理連接。

之前介紹SPI的時(shí)候說(shuō)過(guò),SPI接口目前的使用是多種方式(具體指的是物理連線有幾種方式),Dual SPI、Qual SPI和標(biāo)準(zhǔn)的SPI接口(這種方式肯定不會(huì)出現(xiàn)在連接外設(shè)是SPI Flash上,這玩意沒(méi)必要全雙工),對(duì)于SPI Flash來(lái)說(shuō),主要就是Dual和Qual這兩種方式。具體項(xiàng)目具體看了,理論上在CLK一定的情況下, 線數(shù)越多訪問(wèn)速度也越快。我們項(xiàng)目采用的Dual SPI方式,即兩線。

當(dāng)前涉及到具體的SPI flash芯片類型了,所以必須也得參考flash的datasheet手冊(cè)了。我們以W25Q64JVSSIQ為例。

這是基本信息的介紹,然后看下具體IO的定義

這個(gè)是WSON封裝的管腳定義,其他詳細(xì)信息參考datasheet。

硬件驅(qū)動(dòng)的話也是和芯片強(qiáng)相關(guān)的,因?yàn)樽x寫(xiě)擦都是和硬件時(shí)序相關(guān)的,所以必須得參考硬件datasheet手冊(cè)。

上面的datasheet都詳細(xì)說(shuō)明了每個(gè)操作的時(shí)序周期發(fā)送的命令。上圖中,第一列是指令名稱,第二列是指令編碼,第三列及以后的指令功能與對(duì)應(yīng)的指令有關(guān)。帶括號(hào)的字節(jié)內(nèi)容為flash向主機(jī)返回的字節(jié)數(shù)據(jù),不帶括號(hào)則是主機(jī)向flash發(fā)送字節(jié)數(shù)據(jù)。

A0~A23:flash內(nèi)部存儲(chǔ)器地址;MID0~MID7:制造商ID;ID0~ID15:flash芯片ID;D0~D7:flash內(nèi)部存儲(chǔ)的數(shù)據(jù);dummy:指任意數(shù)據(jù)。

比如獲取deviceID:

表示該命令由這四個(gè)字節(jié)組成,其中dummy意為任意編碼,即這三個(gè)字節(jié)必須得發(fā)數(shù)據(jù),但這些數(shù)據(jù)是任意的,上圖命令列表中帶括號(hào)的字節(jié)數(shù)據(jù)表示由FLASH返回給主機(jī)的響應(yīng),可以看到deviceID命令的第5個(gè)字節(jié)為從機(jī)返回的響應(yīng),(ID7~ID0),即返回設(shè)備的ID號(hào)。

代碼如下:

uint32_t Get_Flash_DeviceID(void)

{

uint8_t deviceID= 0x00;

spiflashReset();

spi_write( 0xAB);

spi_write( Dummy);

spi_write( Dummy);

spi_write( Dummy);

deviceID = spi_write( Dummy);

spi_write( Dummy);

spiflashSet() ;

return deviceID;

}

SPI Flash的擦寫(xiě)注意事項(xiàng)

SPI flash一般支持3種擦寫(xiě)方式:按sector擦寫(xiě),按block擦寫(xiě),整片chip擦寫(xiě)。

以KH25L3255E為例,

? Serial Peripheral Interface compatible -- Mode 0 and Mode 3

? 33,554,432 x 1 bit structure or 16,777,216 x 2 bits (two I/O mode) structure or 8,388,608 x 4 bits (four I/O

mode) structure

? 1024 Equal Sectors with 4K bytes each

- Any Sector can be erased individually

? 128 Equal Blocks with 32K bytes each

- Any Block can be erased individually

? 64 Equal Blocks with 64K bytes each

- Any Block can be erased individually

? Power Supply Operation

- 2.7 to 3.6 volt for read, erase, and program operations

? Latch-up protected to 100mA from -1V to Vcc +1V

由此可以看出,KH25L3255E的sector大小是4K,block大小是32K/64K.因此,可以一次性擦除4K/32K/64K.

三種擦寫(xiě)方式的性能比較:

- Fast erase time: 30ms (typ.)/sector (4K-byte per sector) ; 0.25s(typ.) /block (64K-byte per block); 10s(typ.) /

chip

從上述數(shù)據(jù)看,擦除同樣大小的情況下,執(zhí)行時(shí)間 sector》block》chip

按sector擦寫(xiě),擦完64K需要0.48s,而按block一次性擦寫(xiě)64K只需要0.25s;按block擦寫(xiě),擦完整片chip需要16s,而按chip擦寫(xiě)只需要10s;按sector擦寫(xiě)完整片chip需要30s。

linux/drivers/mtd/devices/m25p80.c看,m25p_probe函數(shù)在選擇擦寫(xiě)單位時(shí),是傾向于選擇小單位的,會(huì)優(yōu)先選擇4K,如下:

/* prefer “small sector” erase if possible */

if (info-》flags & SECT_4K) {

flash-》erase_opcode = OPCODE_BE_4K;

flash-》mtd.erasesize = 4096;

} else {

flash-》erase_opcode = OPCODE_SE;

flash-》mtd.erasesize = info-》sector_size;

}

這在在用戶空間體現(xiàn)在,使用mtd工具或者ioctl讀取erasesize時(shí)讀到的是sector(4K),如下:

# mtd_debug info /dev/mtd0

mtd.type = MTD_NORFLASH

mtd.flags = MTD_CAP_NORFLASH

mtd.size = 2883584 (2M)

mtd.erasesize = 4096 (4K)

mtd.writesize = 1

mtd.oobsize = 0

regions = 0

# mtdinfo /dev/mtd0

mtd0

Name: flash0.bolt

Type: nor

Eraseblock size: 4096 bytes, 4.0 KiB

Amount of eraseblocks: 704 (2883584 bytes, 2.8 MiB)

Minimum input/output unit size: 1 byte

Sub-page size: 1 byte

Character device major/minor: 90:0

Bad blocks are allowed: false

Device is writable: true

若想要將erasesize改成block大小,需要修改驅(qū)動(dòng),例如,將上述m25p80.c中的配置成SECT_4K的相關(guān)地方改成0,驅(qū)動(dòng)就會(huì)使用block大小。

另外,需要注意的是,m25p80.c中“sector”和“block”的概念搞反了,里面的“block”才是規(guī)格書(shū)中的sector,一般是4K,請(qǐng)見(jiàn)OPCODE_BE_4K和OPCODE_SE兩個(gè)宏定義處。

mtd.erasesize的大小會(huì)對(duì)應(yīng)用上有一些影響,比較重要的一點(diǎn)是在制作某些嵌入式文件系統(tǒng)的鏡像文件時(shí),需要設(shè)置擦除單位,如果設(shè)置的擦除單位和驅(qū)動(dòng)中的不符,會(huì)導(dǎo)致文件系統(tǒng)無(wú)法正常工作。

另外,porting層設(shè)置spi的擦寫(xiě)單位時(shí),也需要注意當(dāng)前實(shí)際的erasesize。

案例(解決方法就是修改驅(qū)動(dòng)將spi-mtd的erasesize改成block大小,使其和jffs2的擦寫(xiě)單位一致):

http://bbs.csdn.net/topics/390299487/

《制作JFFS2時(shí)的erase_block與SPI FLASH中的erase_sector的關(guān)系?》

如題, 在制作JFFS2時(shí) 需要用到-e 參數(shù)(。/mkfs.jffs2 -b --pad=524288 -s 256 -e 65536 -d userfs/ -o usrjffs2.img)help命令中,對(duì)其的解釋為: -e, --eraseblock=SIZE Use erase block size SIZE (default: 64KiB)。

在SPI FLASH(winbond 8M)的datasheet中寫(xiě)到:其erase_sector只能為4KB,erase_block可為32/64kB,

目前在SPI的驅(qū)動(dòng)中,設(shè)置block_size為 64KB, erase_sector為 4KB。

問(wèn)題來(lái)了!

將制作好的512K FLASH掛載到系統(tǒng)上后,會(huì)報(bào)如下錯(cuò)誤:

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00022034: 0x5771 instead

Further such events for this erase block will not be printed

Node at 0x00022f60 with length 0x000000f6 would run over the end of the erase block

Perhaps the file system was created with the wrong erase size?

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00023000: 0x69c2 instead

進(jìn)入系統(tǒng)后,發(fā)現(xiàn)jffs2中的文件有缺失。

根據(jù)報(bào)錯(cuò)提示以及網(wǎng)上資料, 原因應(yīng)該為: 制作JFFS2時(shí)的erase_block 與系統(tǒng)的不符~。

但系統(tǒng)這塊的block_size(這個(gè)應(yīng)該也就是erase_block的大小吧?)已經(jīng)是設(shè)置成64KB的了。

更改SPI驅(qū)動(dòng)中,erase_sector的大小為64KB,則JFFS2報(bào)錯(cuò)問(wèn)題解決, 但由于該SPI FLASH的

erase_sector是固定死的4K,貿(mào)然使用64KB(32KB同樣)會(huì)造成再擦寫(xiě)FLASH時(shí),極大概率出現(xiàn)某

一erase_secotr大小的塊中數(shù)據(jù)為空的情況,即系統(tǒng)不能啟動(dòng)。

另,在制作JFFS2時(shí),將-e參數(shù)設(shè)置為4096,以配合FLASH的erase_sector, 但悲催的是mkfs.jffs2

所支持-e 最小為8KB。

請(qǐng)問(wèn)現(xiàn)在這個(gè)報(bào)錯(cuò)問(wèn)題應(yīng)該如何解決???

一點(diǎn)細(xì)節(jié): 嘗試添加了 -s 參數(shù),其大小為FLASH page的大小256B,但問(wèn)題依舊。

當(dāng)JFFS2中文件較少時(shí),不知為何就不會(huì)出現(xiàn)上方的報(bào)錯(cuò)。

關(guān)于SPI FLASH的讀寫(xiě)問(wèn)題

spi flash W25Q128會(huì)偶爾出現(xiàn)寫(xiě)入錯(cuò)誤的情況,會(huì)發(fā)現(xiàn)讀出的值和寫(xiě)入的值不一致,需加入2次讀出比較判斷。

21W25QXX_Read(&temp_date_count,0x000000,1);

//W25QXX_Write((u8*)&temp_date,0x400000,135);

//W25QXX_Read((u8*)&temp_data_test,0x400000,135);

W25QXX_Write((u8*)&temp_date,(temp_date_count*135+1),135);

W25QXX_Read((u8*)&temp_data_test,(temp_date_count*135+1),135);

if(memcmp(&temp_date,&temp_data_test,135)!=0)

{

W25QXX_Write((u8*)&temp_date,(temp_date_count*135+1),135);

W25QXX_Read((u8*)&temp_data_test,(temp_date_count*135+1),135);

if(memcmp(&temp_date,&temp_data_test,135)!=0)

{

W25QXX_Write((u8*)&temp_date,(temp_date_count*135+1),135);

}

}

temp_date_count=temp_date_count+1;//Each time a structure is written

if(temp_date_count==60)

{

temp_date_count=0;

}

W25QXX_Write(&temp_date_count,0,1);

結(jié)語(yǔ)

關(guān)于SPI flash的相關(guān)介紹就到這了,如有不足之處歡迎指正。

相關(guān)閱讀推薦:揭開(kāi)Zynq Z-7000從SPI接口掛載的flash啟動(dòng)的神秘面紗

相關(guān)閱讀推薦:基于FPGA 的SPI Flash 控制器設(shè)計(jì)及驗(yàn)證

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1635

    瀏覽量

    148028
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1706

    瀏覽量

    91585
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA的SPI Flash控制器的設(shè)計(jì)方案

    傳統(tǒng)的Flash讀寫(xiě)是通過(guò)CPU軟件編程實(shí)現(xiàn),其讀寫(xiě)速度較慢,且占用CPU資源,另外由于Flash芯片本身功能指令較多,使得對(duì)芯片進(jìn)行直接操作變得非常困難。本文提出一個(gè)基于FPGA的
    發(fā)表于 09-24 09:12 ?6160次閱讀
    基于FPGA的<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>控制器的設(shè)計(jì)方案

    SPI方式FPGA配置和SPI flash編程

    SPI方式FPGA配置和SPI flash編程
    發(fā)表于 05-16 18:01 ?165次下載
    <b class='flag-5'>SPI</b>方式FPGA配置和<b class='flag-5'>SPI</b> <b class='flag-5'>flash</b>編程

    基于紅牛開(kāi)發(fā)板的spi flash讀寫(xiě)圖片

    你的MCU上有外部總線接口,SPI flash就是通過(guò)SPI口對(duì)flash進(jìn)行讀寫(xiě)。速度上,總線flas
    發(fā)表于 09-01 17:16 ?16次下載
    基于紅牛開(kāi)發(fā)板的<b class='flag-5'>spi</b> <b class='flag-5'>flash</b><b class='flag-5'>讀寫(xiě)</b>圖片

    SPI flash如何運(yùn)行程序,SPI flash有哪些應(yīng)用

    SPI一種通信接口。那么嚴(yán)格的來(lái)說(shuō)SPI Flash是一種使用SPI通信的Flash,即,可能指NOR也可能是NAND。
    的頭像 發(fā)表于 09-19 10:54 ?1.9w次閱讀
    <b class='flag-5'>SPI</b> <b class='flag-5'>flash</b>如何運(yùn)行程序,<b class='flag-5'>SPI</b> <b class='flag-5'>flash</b>有哪些應(yīng)用

    淺析spi flash驅(qū)動(dòng)及其程序

    怎么用說(shuō)白了對(duì)于Flash就是讀寫(xiě)擦,也就是實(shí)現(xiàn)flash的驅(qū)動(dòng)。先簡(jiǎn)單了解下spi flash的物理連接。
    的頭像 發(fā)表于 10-07 11:26 ?1.8w次閱讀
    淺析<b class='flag-5'>spi</b> <b class='flag-5'>flash</b>驅(qū)動(dòng)及其程序

    淺析FLASH讀寫(xiě)----SPI原理及應(yīng)用

    SPI一種通信接口。那么嚴(yán)格的來(lái)說(shuō)SPI Flash是一種使用SPI通信的Flash,即,可能指NOR也可能是NAND。
    的頭像 發(fā)表于 10-07 11:32 ?2.4w次閱讀
    淺析<b class='flag-5'>FLASH</b><b class='flag-5'>讀寫(xiě)</b>----<b class='flag-5'>SPI</b>原理及應(yīng)用

    STM32_ SPI讀寫(xiě)Flash

    STM32_SPI讀寫(xiě)Flash
    的頭像 發(fā)表于 04-08 10:26 ?5569次閱讀
    STM32_ <b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>Flash</b>

    實(shí)現(xiàn)簡(jiǎn)單的SPI讀寫(xiě)FLASH

    實(shí)現(xiàn)簡(jiǎn)單的SPI讀寫(xiě)FLASH一、前言繼上篇文章SPI的相關(guān)知識(shí),本章主要介紹使用SPI協(xié)議實(shí)現(xiàn)簡(jiǎn)單的
    發(fā)表于 11-26 19:21 ?23次下載
    實(shí)現(xiàn)簡(jiǎn)單的<b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>FLASH</b>

    SPI Nand Flash簡(jiǎn)介

    1.SPI Nand Flash簡(jiǎn)介SPI Nand Flash顧名思義就是串行接口的Nand Flash,它和普通并行的Nand
    發(fā)表于 12-02 10:51 ?34次下載
    <b class='flag-5'>SPI</b> Nand <b class='flag-5'>Flash</b>簡(jiǎn)介

    STM32F103學(xué)習(xí)筆記——SPI讀寫(xiě)Flash(二)

    介紹1.軟件設(shè)計(jì)流程SPI讀寫(xiě)Flash流程:初始化通訊引腳及端口時(shí)鐘;使能SPI時(shí)鐘;配置SPI結(jié)構(gòu)體;編寫(xiě)基本
    發(fā)表于 12-22 19:30 ?10次下載
    STM32F103學(xué)習(xí)筆記——<b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>Flash</b>(二)

    關(guān)于SPI Flash的那些事兒

    EPROM通常采用是IIC串行總線,低速,單雙工,通信速率一般是百KHz。而SPI Flash是采用的SPI總線,高速,全雙工,通訊速率一般是百M(fèi)Hz。S...
    發(fā)表于 01-26 18:55 ?5次下載
    <b class='flag-5'>關(guān)于</b><b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>的那些事兒

    SPI控制EF3內(nèi)置FLASH讀寫(xiě)

    電子發(fā)燒友網(wǎng)站提供《SPI控制EF3內(nèi)置FLASH讀寫(xiě).pdf》資料免費(fèi)下載
    發(fā)表于 09-27 10:19 ?2次下載
    <b class='flag-5'>SPI</b>控制EF3內(nèi)置<b class='flag-5'>FLASH</b><b class='flag-5'>讀寫(xiě)</b>

    SPI控制EF2內(nèi)置FLASH讀寫(xiě)

    電子發(fā)燒友網(wǎng)站提供《SPI控制EF2內(nèi)置FLASH讀寫(xiě).pdf》資料免費(fèi)下載
    發(fā)表于 09-26 15:16 ?3次下載
    <b class='flag-5'>SPI</b>控制EF2內(nèi)置<b class='flag-5'>FLASH</b><b class='flag-5'>讀寫(xiě)</b>

    基于FPGA的SPI Flash控制器的設(shè)計(jì)方案

    一個(gè)基于FPGA的SPI Flash讀寫(xiě)硬件實(shí)現(xiàn)方案,該方案利用硬件對(duì)SPI Flash進(jìn)行控制,能夠非常方便地完成
    的頭像 發(fā)表于 07-15 16:55 ?2009次閱讀
    基于FPGA的<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>控制器的設(shè)計(jì)方案

    LuatOS入門(mén)課|Air201模組與SPI Flash的交互藝術(shù)

    今天我會(huì)把我了解的關(guān)于如何使用SPI讀寫(xiě)外部Flash教給大家,本文將通過(guò)Air201+擴(kuò)展板讀寫(xiě)外部f
    的頭像 發(fā)表于 11-17 09:51 ?268次閱讀
    LuatOS入門(mén)課|Air201模組與<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>的交互藝術(shù)
    主站蜘蛛池模板: 欧美精品xx| 午夜在线免费视频| 天天插狠狠干| 日本黄页网址| 日本一区二区在线不卡| 色婷婷综合网| seba51久久精品| 四虎黄色网| 欧美色爱综合| 欧美在线视频播放| 天天曰天天爽| 一区二区不卡视频在线观看| 美女扒开尿口给男人桶| 欧美式free群乱| 天天操天天插天天射| 日本一区二区三区视频在线| 人与禽交免费网站视频| 天天干天天干天天干天天干天天干| 亚洲一区二区三区中文字幕5566| 日韩三级毛片| 天天操天天射天天色| 久久精品国产亚洲婷婷| 毛片不卡一区二区三区| 九九精品在线| 五月婷婷六月婷婷| 欧美日一区| 欧美日日日| 亚洲图片综合区另类图片| 成熟女人免费一级毛片| 久久久午夜视频| 亚洲精品国产美女在线观看| 国产美女免费| 8888四色奇米在线观看不卡| 亚洲 欧美 动漫| 资源视频在线观看| 轻点太大了好深好爽h文| 加勒比色| h视频免费网站| 久久五月女厕所一区二区| 成 人网站免费| 日本美女黄视频|