zoukankan      html  css  js  c++  java
  • STM32.SPI(25Q16)

    1.首先认识下W25Q16DVSIG,

    • SOP8
    • SPI FLASH
    • 16MBIT  2MB(4096个字节)

    (里面可以放字库,图片,也可以程序掉电不丢失数据放里面)

    例程讲解:

    1.用到SPI库;conf.h里打开头文件

    2.2M串行FLASH  W25Q16初始化

    SPI_FLASH_Init();

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  

    RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);  //注意挂载的时钟线

    注意片选,SPI也可以多片工作的;(这里用了一片)

    切记:端口要一个个定义

    ②读器件ID(此处不能出错)

        /* Get SPI Flash Device ID */
        DeviceID = SPI_FLASH_ReadDeviceID();
    u32 SPI_FLASH_ReadDeviceID(void)
    {
      u32 Temp = 0;
    
      /* Select the FLASH: Chip Select low */
      SPI_FLASH_CS_LOW();   //片选拉低,选中该设备
    
      /* Send "RDID " instruction */
      SPI_FLASH_SendByte(W25X_DeviceID);//先发送一个器ID,告诉它我们要读你的器件ID了(这是一个命令) 0XAB
      SPI_FLASH_SendByte(Dummy_Byte);     //发送3个字节的空地址,25X16的地址是24位的,最后再发一个字节的话,就返回了一个字节的DEVICEID!
      SPI_FLASH_SendByte(Dummy_Byte);
      SPI_FLASH_SendByte(Dummy_Byte);
      
      /* Read a byte from the FLASH */
      Temp = SPI_FLASH_SendByte(Dummy_Byte);
    
      /* Deselect the FLASH: Chip Select high */
      SPI_FLASH_CS_HIGH();
    
      return Temp;
    }

    看如图:

    0xAB 对应 ID7-ID0

    ③读取FLASHID

        /* Get SPI Flash ID */
        FlashID = SPI_FLASH_ReadID();

    函数如下:

    /*******************************************************************************
    * Function Name  : SPI_FLASH_ReadID
    * Description    : Reads FLASH identification.
    * Input          : None
    * Output         : None
    * Return         : 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(W25X_JedecDeviceID);   //发送9F过去,将返回一个字节的ID(M7-M0)然后再返回来连个字节的deviceID (ID15-ID8/ID7-ID0)
    
      /* Read a byte from the FLASH */
      Temp0 = SPI_FLASH_SendByte(Dummy_Byte);    //读取M7-M0
    
      /* Read a byte from the FLASH */
      Temp1 = SPI_FLASH_SendByte(Dummy_Byte);    //读取ID15-ID8
    
      /* Read a byte from the FLASH */
      Temp2 = SPI_FLASH_SendByte(Dummy_Byte);   //读取ID7-ID0
    /* Deselect the FLASH: Chip Select high */ SPI_FLASH_CS_HIGH(); Temp = (Temp0 << 16) | (Temp1 << 8) | Temp2; return Temp; }   //数据组合

    ID:

    对于 Manufacturer  和  Memory Type  对应的数据时根据不同的型号而不同的(如图)

    华邦公司不同型号表:

    对于25Q16

    只是器件地址不一样,他们都是华邦公司的嘛

  • 相关阅读:
    SIP语音对讲从零到整之(二)resiprocate编译(Linux,库用于Android)
    Intel Media SDK decode_sample剖析(一)——初始化及解码数据头
    Hadoop-HA集群搭建-rehl7.4
    (1)jmeter录制脚本(使用代理的方式)
    Java自动化环境搭建笔记(3)
    Java自动化环境搭建笔记(1)
    ant安装(Windows)
    jmeter源码环境(IDEA)
    离线安装docker(RedHat7.4)
    PostgreSQL日志分析工具
  • 原文地址:https://www.cnblogs.com/Ph-one/p/4106037.html
Copyright © 2011-2022 走看看