DA14580 --- flash分析

  在使用suta功能的时候,flash分布的map图如下


offset#0开始地址在0x0000

  AN-B-001 Header(spi)数据分布如下 8个字节大小


 

 

   #Image#0 Bootloader 开始地址 0x0008 开始

   offset#1 开始地址在0x8000

   offset#2 开始地址在0x13000

 Last section 开始地址为0x1f000

 

AN-B-001Header+Image 0 (bootloader )大小为 0x8000 = 32kb

Header#1+Image 1大小为 0x13000 -0x8000 = 44kb

Header#2+Image 2大小为 0x1f000 -0x13000 = 48kb

Lastsection 大小为4kb (最小单位扇区)

44+48+4+32=128kb

所以整体大小最小需要128kb的大小才能实现空中升级等功能

flash 0x0000 --0x1ffff 的空间是放程序用的地方

 

0x20000之后的地址就是可以随便存储东西了

 

接下来来分析往SPI-flash写数据操作


图片中 自定义flash大小 为我们使用的flash的型号以及大小等等参数 根据自己使用来变化

#include "flash.h"

 

 

#define SECTION_ADDRESS   80   //这个扇区的地址必须大于128kb 原因上面写了

void flash_spi_init(void)

{

        SPI_Pad_t cs_pad_param = {  GPIO_PORT_0,GPIO_PIN_3  };

    spi_init(&cs_pad_param, SPI_MODE_8BIT, SPI_ROLE_MASTER,SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);

   //初始化flash

    spi_flash_init(W25Q40_FLASH_SIZE,W25Q40_FLASH_PAGE_SIZE);

}

 

    uint8_treadbuf[100]={0};

void Flash_test(void)

{

       uint8_t writebuf[88]={0};

       for(uint8_t i=0;i<sizeof(writebuf)/sizeof(uint8_t);i++)

         {

           writebuf[i]= i ;

        }

       //spi_flash_sector_earse

        spi_flash_release_from_power_down();

      spi_flash_write_data(writebuf,(uint32_t)((SECTION_ADDRESS)*4096),sizeof(writebuf));

        spi_flash_power_down();

     

        spi_flash_release_from_power_down();

      spi_flash_read_data(readbuf,(uint32_t)((SECTION_ADDRESS)*4096),sizeof(readbuf));

       spi_flash_power_down();  

   

}

 

#ifndef __FLASH__H

#define __FLASH__H

 

 

 

 

 

#include "stdio.h"

#include "spi_flash.h"

 

void flash_spi_init(void);

void Flash_test(void);

 

 

 

 

 

#endif

 

这里是flash 初始化过程

Flash_test 里面写进去和读出来的数据一样 表示操作flash,ok

 

 

 

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页