在线观看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)不再提示

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

ss ? 作者:工程師譚軍 ? 2018-10-07 11:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SPI Flash
首先它是個(gè)Flash,F(xiàn)lash是什么東西就不多說(shuō)了(非易失性存儲(chǔ)介質(zhì)),分為NOR和NAND兩種(NOR和NAND的區(qū)別本篇不做介紹)。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)代稱。
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ō)白了對(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方式,即兩線。
淺析FLASH讀寫(xiě)----SPI原理及應(yīng)用

應(yīng)用環(huán)境如下: 控制器 STM32F103

FLASH M25P64

讀寫(xiě)方式 SPI

編程環(huán)境 MDK

以SPI方式讀寫(xiě)FLASH的基本流程如下:

(1)設(shè)置SPI的工作模式。

(2)flash初始化。

(3)SPI寫(xiě)一個(gè)字節(jié)、寫(xiě)使能函數(shù)、寫(xiě)數(shù)據(jù)函數(shù),讀數(shù)據(jù)函數(shù)等編寫(xiě)。

(4)主函數(shù)編寫(xiě)。

一 設(shè)置SPI工作模式。

宏定義

#define SPI_FLASH_CS_LOW() GPIO_ResetBits(GPIOA,GPIO_Pin_4)

#define SPI_FLASH_CS_HIGH() GPIO_SetBits(GPIOA,GPIO_Pin_4)

/* M25P64 SPI Flash supported commands */

#define WRSR 0x01 /* Write Status Register instruction */

#define WREN 0x06 /* Write enable instruction */

#define WRDI 0x04 /* Write disable instruction */

#define READ 0x03 /* Read from Memory instruction */

#define RDSR 0x05 /* Read Status Register instruction */

#define RDID 0x9F /* Read identification */

#define FAST_READ 0x0B /* Fast read Status Register instruction */

#define SE 0xD8 /* Sector Erase instruction */

#define BE 0xC7 /* Bulk Erase instruction */

#define PP 0x02 /* Page prigrame instruction */

#define RES 0xAB /* Sector Erase instruction */

#define WIP_FLAG 0x01 /* Write In Progress (WIP) flag */

#define DUMMY_BYTE 0xA5

#define SIZE sizeof(TEXT_Buffer)

#define SPI_FLASH_PAGESIZE 0x100

#define FLASH_WriteAddress 0x000000

#define FLASH_ReadAddress FLASH_WriteAddress

#define FLASH_SectorToErase FLASH_WriteAddress

#define M25P64_FLASH_ID 0x202017

#define countof(a) (sizeof(a) / sizeof(*(a)))

#define BufferSize (countof(Tx_Buffer)-1)

SPI初始化

void Init_SPI1(void)

{

SPI_InitTypeDef SPI_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable SPI and GPIO clocks */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA , ENABLE);

/* Configure SPI pins: SCK, MISO and MOSI */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure I/O for Flash Chip select */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

/* SPI configuration */

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //雙工模式

SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI主模式

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8bit數(shù)據(jù)

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //CLK空閑時(shí)為高電平

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CLK上升沿采樣,因?yàn)樯仙厥堑诙€(gè)邊沿動(dòng)作,所以也可以理解為第二個(gè)邊沿采樣

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //片選用軟件控制

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //SPI頻率:72M/4 = 18M

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前

SPI_InitStructure.SPI_CRCPolynomial = 7; //crc7,stm32spi帶硬件ecc

SPI_Init(SPI1, &SPI_InitStructure);

/* Enable the SPI */

SPI_Cmd(SPI1, ENABLE);

SPI_FLASH_SendByte(0xFF); // 啟動(dòng)傳輸

}

二 FLASH初始化

void Init_FLASH(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable GPIO clocks */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA , ENABLE);

/* PA0--SPI_FLASH_HOLD */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* PC4-- SPI_FLASH_WP */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_4);

Init_SPI1();

}

三 函數(shù)編寫(xiě)

/* 通過(guò)SPIx發(fā)送一個(gè)數(shù)據(jù),同時(shí)接收一個(gè)數(shù)據(jù)*/

u8 SPI_FLASH_SendByte(u8 byte)

{

/* Loop while DR register in not emplty */

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//如果發(fā)送寄存器數(shù)據(jù)沒(méi)有發(fā)送完,循環(huán)等待

/* Send byte through the SPI1 peripheral */

SPI_I2S_SendData(SPI1, byte); //往發(fā)送寄存器寫(xiě)入要發(fā)送的數(shù)據(jù)

/* Wait to receive a byte */

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//如果接收寄存器沒(méi)有收到數(shù)據(jù),循環(huán)

/* Return the byte read from the SPI bus */

return SPI_I2S_ReceiveData(SPI1);

}

/* brief Enables the write access to the FLASH. */

void SPI_FLASH_WriteEnable(void)

{

/* Select the FLASH: Chip Select low */

SPI_FLASH_CS_LOW();

/* Send “Write Enable” instruction */

SPI_FLASH_SendByte(WREN);

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

}

/*brief Erases the specified FLASH sector. */

void SPI_FLASH_SectorErase(u32 SectorAddr)

{

/* Send write enable instruction */

SPI_FLASH_WriteEnable();

/* Sector Erase */

/* Select the FLASH: Chip Select low */

SPI_FLASH_CS_LOW();

/* Send Sector Erase instruction */

SPI_FLASH_SendByte(SE);

/* Send SectorAddr high nibble address byte */

SPI_FLASH_SendByte((SectorAddr & 0xFF0000) 》》 16);

/* Send SectorAddr medium nibble address byte */

SPI_FLASH_SendByte((SectorAddr & 0xFF00) 》》 8);

/* Send SectorAddr low nibble address byte */

SPI_FLASH_SendByte(SectorAddr & 0xFF);

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

}

/*brief Writes more than one byte to the FLASH with a single WRITE cycle */

void SPI_FLASH_PageWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)

{

/* Enable the write access to the FLASH */

SPI_FLASH_WriteEnable();

/* Select the FLASH: Chip Select low */

SPI_FLASH_CS_LOW();

/* Send “Write to Memory ” instruction */

SPI_FLASH_SendByte(PP);

/* Send WriteAddr high nibble address byte to write to */

SPI_FLASH_SendByte((WriteAddr & 0xFF0000) 》》 16);

/* Send WriteAddr medium nibble address byte to write to */

SPI_FLASH_SendByte((WriteAddr & 0xFF00) 》》 8);

/* Send WriteAddr low nibble address byte to write to */

SPI_FLASH_SendByte(WriteAddr & 0xFF);

while(NumByteToWrite--)

{

SPI_FLASH_SendByte(*pBuffer);

pBuffer++;

}

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

}

/*brief Writes block of data to the FLASH. In this function, the number of */

void SPI_FLASH_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite)

{

u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0, temp = 0;

Addr = WriteAddr % SPI_FLASH_PAGESIZE;

count = SPI_FLASH_PAGESIZE - Addr;

NumOfPage = NumByteToWrite / SPI_FLASH_PAGESIZE;

NumOfSingle = NumByteToWrite % SPI_FLASH_PAGESIZE;

if (Addr == 0) /* WriteAddr is SPI_FLASH_PAGESIZE aligned */

{

if (NumOfPage == 0) /* NumByteToWrite 《 SPI_FLASH_PAGESIZE */

{

SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);

}

else /* NumByteToWrite 》 SPI_FLASH_PAGESIZE */

{

while (NumOfPage--)

{

SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PAGESIZE);

WriteAddr += SPI_FLASH_PAGESIZE;

pBuffer += SPI_FLASH_PAGESIZE;

}

SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);

}

}

else /* WriteAddr is not SPI_FLASH_PAGESIZE aligned */

{

if (NumOfPage == 0) /* NumByteToWrite 《 SPI_FLASH_PAGESIZE */

{

if (NumOfSingle 》 count) /* (NumByteToWrite + WriteAddr) 》 SPI_FLASH_PAGESIZE */

{

temp = NumOfSingle - count;

SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);

WriteAddr += count;

pBuffer += count;

SPI_FLASH_PageWrite(pBuffer, WriteAddr, temp);

}

else

{

SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumByteToWrite);

}

}

else /* NumByteToWrite 》 SPI_FLASH_PAGESIZE */

{

NumByteToWrite -= count;

NumOfPage = NumByteToWrite / SPI_FLASH_PAGESIZE;

NumOfSingle = NumByteToWrite % SPI_FLASH_PAGESIZE;

SPI_FLASH_PageWrite(pBuffer, WriteAddr, count);

WriteAddr += count;

pBuffer += count;

while (NumOfPage--)

{

SPI_FLASH_PageWrite(pBuffer, WriteAddr, SPI_FLASH_PAGESIZE);

WriteAddr += SPI_FLASH_PAGESIZE;

pBuffer += SPI_FLASH_PAGESIZE;

}

if (NumOfSingle != 0)

{

SPI_FLASH_PageWrite(pBuffer, WriteAddr, NumOfSingle);

}

}

}

}

/*brief Reads a block of data from the FLASH. */

void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead)

{

/* Select the FLASH: Chip Select low */

SPI_FLASH_CS_LOW();

/* Send “Read from Memory ” instruction */

SPI_FLASH_SendByte(READ);

/* Send ReadAddr high nibble address byte to read from */

SPI_FLASH_SendByte((ReadAddr & 0xFF0000) 》》 16);

/* Send ReadAddr medium nibble address byte to read from */

SPI_FLASH_SendByte((ReadAddr& 0xFF00) 》》 8);

/* Send ReadAddr low nibble address byte to read from */

SPI_FLASH_SendByte(ReadAddr & 0xFF);

while (NumByteToRead--) /* while there is data to be read */

{

/* Read a byte from the FLASH */

*pBuffer = SPI_FLASH_SendByte(DUMMY_BYTE);

/* Point to the next location where the byte read will be saved */

pBuffer++;

}

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

}

/*brief Reads FLASH identification. */

u32 SPI_FLASH_ReadID(void)

{

u32 Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;

/* Select the FLASH: Chip Select low */

SPI_FLASH_CS_LOW();

/* Send “RDID ” instruction */

SPI_FLASH_SendByte(0x9F);

/* Read a byte from the FLASH */

Temp0 = SPI_FLASH_SendByte(DUMMY_BYTE);

/* Read a byte from the FLASH */

Temp1 = SPI_FLASH_SendByte(DUMMY_BYTE);

/* Read a byte from the FLASH */

Temp2 = SPI_FLASH_SendByte(DUMMY_BYTE);

/* Deselect the FLASH: Chip Select high */

SPI_FLASH_CS_HIGH();

Temp = (Temp0 《《 16) | (Temp1 《《 8) | Temp2;

return Temp;

}

四 主函數(shù)

void SPI1_Test(void)

{

/* Get SPI Flash ID */

FLASH_ID = SPI_FLASH_ReadID();

FLASH_ID = SPI_FLASH_ReadID();

if (FLASH_ID == M25P64_FLASH_ID)

{

/* Write Tx_Buffer data to SPI FLASH memory */

SPI_FLASH_BufferWrite(Tx_Buffer, FLASH_WriteAddress, BufferSize);

delay_ms(20);

DbgOutputstr(“Write message is ok!\r\n”);

/* Read data from SPI FLASH memory */

memset(Rx_Buffer,0,sizeof(Rx_Buffer));

SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);

DbgOutputstr(“the message you write is:\r\n”);

DbgOutputstr((char *)Rx_Buffer);

DbgOutputstr(“\r\n”);//插入換行

/* Erase SPI FLASH Sector to write on */

SPI_FLASH_SectorErase(FLASH_SectorToErase);

delay_ms(10);

/* Read data from SPI FLASH memory No data -----Erase is ok */

memset(Rx_Buffer,0,sizeof(Rx_Buffer));

SPI_FLASH_BufferRead(Rx_Buffer, FLASH_ReadAddress, BufferSize);

DbgOutputstr(“the message you write is:\r\n”);

DbgOutputstr((char *)Rx_Buffer);

DbgOutputstr(“\r\n”);//插入換行

DbgOutputstr(“\r\n”);//插入換行

delay_ms(1000);

}

}


聲明:本文內(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

    文章

    1676

    瀏覽量

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

    關(guān)注

    17

    文章

    1799

    瀏覽量

    95682
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32CubeMx入門(mén)教程(6):SPI讀寫(xiě)FLAH的應(yīng)用

    導(dǎo)語(yǔ)“本教程將使用CubeMX初始化SPI,使用SPI對(duì)W25Q64 FLASH進(jìn)行讀寫(xiě)操作,通過(guò)HAL庫(kù)的讀寫(xiě)應(yīng)用來(lái)數(shù)據(jù)
    發(fā)表于 07-12 11:32 ?3814次閱讀
    STM32CubeMx入門(mén)教程(6):<b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b>FLAH的應(yīng)用

    SPI如何讀寫(xiě)串行FLASH

    SPI有哪幾種通訊模式?SPI如何讀寫(xiě)串行FLASH
    發(fā)表于 02-17 07:50

    基于紅牛開(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是什么,關(guān)于SPI FLASH讀寫(xiě)問(wèn)題

    SPI一種通信接口。那么嚴(yán)格的來(lái)說(shuō)SPI Flash是一種使用SPI通信的Flash,即,可能指NOR也可能是NAND。
    的頭像 發(fā)表于 09-18 14:38 ?10.5w次閱讀
    <b class='flag-5'>SPI</b> <b class='flag-5'>flash</b>是什么,關(guān)于<b class='flag-5'>SPI</b> <b class='flag-5'>FLASH</b>的<b class='flag-5'>讀寫(xiě)</b>問(wèn)題

    淺析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.9w次閱讀
    <b class='flag-5'>淺析</b><b class='flag-5'>spi</b> <b class='flag-5'>flash</b>驅(qū)動(dòng)及其程序

    STM32F10x_SPI (硬件接口 + 軟件模擬)讀寫(xiě)Flash(25Q16)

    STM32F10x_SPI(硬件接口 + 軟件模擬)讀寫(xiě)Flash(25Q16)
    的頭像 發(fā)表于 03-25 13:59 ?1.1w次閱讀
    STM32F10x_<b class='flag-5'>SPI</b> (硬件接口 + 軟件模擬)<b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>Flash</b>(25Q16)

    STM32F0xx_SPI讀寫(xiě)(Flash) 配置詳細(xì)過(guò)程

    STM32F0xx_SPI讀寫(xiě)(Flash)配置詳細(xì)過(guò)程
    的頭像 發(fā)表于 04-07 11:40 ?5750次閱讀
    STM32F0xx_<b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b>(<b class='flag-5'>Flash</b>) 配置詳細(xì)過(guò)程

    STM32_ SPI讀寫(xiě)Flash

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

    單片機(jī)匯編讀寫(xiě)SPI FLASH的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)匯編讀寫(xiě)SPI FLASH的詳細(xì)資料說(shuō)明。
    發(fā)表于 08-14 10:45 ?20次下載

    實(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>

    完整的讀寫(xiě)flash解讀(IIC方式與SPI方式相比較,基于STM32F103ZET6)

    前言前面的博客描述了如何讀寫(xiě)flash,可能還對(duì)讀寫(xiě)flash思路還是不是那么的清晰,首先我們用的是外置的flash,就要模擬跟外部硬件通訊
    發(fā)表于 12-17 18:15 ?8次下載
    完整的<b class='flag-5'>讀寫(xiě)</b><b class='flag-5'>flash</b>解讀(IIC方式與<b class='flag-5'>SPI</b>方式相比較,基于STM32F103ZET6)

    單片機(jī)學(xué)習(xí)筆記————STM32使用SPI讀寫(xiě)串行Flash(三)

    第一步:讀寫(xiě)相關(guān)函數(shù)在向 FLASH 芯片存儲(chǔ)矩陣寫(xiě)入數(shù)據(jù)前,首先要使能寫(xiě)操作,通過(guò)“Write Enable”命令即可寫(xiě)使能。1.寫(xiě)使能命令/** * @brief 向Flash發(fā)送寫(xiě)使能命令
    發(fā)表于 12-22 19:15 ?4次下載
    單片機(jī)學(xué)習(xí)筆記————STM32使用<b class='flag-5'>SPI</b><b class='flag-5'>讀寫(xiě)</b>串行<b class='flag-5'>Flash</b>(三)

    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>(二)

    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>
    主站蜘蛛池模板: 国产小片 | 久久国产免费观看精品 | 手机在线免费观看视频 | 男女交性视频免费视频 | 午夜啪视频 | 6080午夜| yyy6080韩国三级理论 | 国产精品午夜自在在线精品 | 欧美一区亚洲 | 91久久澡人人爽人人添 | 成人免费aaaaa毛片 | 精品一区二区国语对白 | 亚洲色图图片区 | 女人被免费网站视频在线 | 亚洲小younv另类 | 五月天婷婷基地 | 亚洲国产精品久久精品怡红院 | 在线色片 | 97色在线视频观看香蕉 | 韩国在线视频 | 一区二区三区亚洲 | 色婷婷六月桃花综合影院 | 天天操天天插天天射 | 免费啪| 伊人网大 | 午夜操操 | 国产青青草 | 色综合色狠狠天天综合色hd | 免费视频h| 日韩一级片在线 | 欧洲人体超大胆露私视频 | 四虎免费永久观看 | 成年人网站免费观看 | 午夜视频一区二区 | 亚洲一区二区三 | 夜夜夜夜夜夜夜工噜噜噜 | 久久99精品久久久久久野外 | 免费人成a大片在线观看动漫 | 日日摸人人拍人人澡 | 狠狠色丁香婷婷第六色孕妇 | 韩国三级在线不卡播放 |