spi_down_mdk.zip

  • O9_340870
    了解作者
  • 5.4KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-27 08:05
    上传日期
mdk spi烧录算法
spi_down_mdk.zip
  • FlashOS.h
    4.2KB
  • stm32_f103.sct
    829B
  • FlashDev.c
    1.6KB
  • Target.lin
    365B
  • FlashPrg.c
    13.3KB
内容介绍
/** ****************************************************************************** * 文件名程: * 作 者: liwen * 版 本: v1.0 * 编写日期: 2019-04-10 * 功 能: ****************************************************************************** */ #include "FlashOS.h" /* ********************************************************************************************************* ********************************************************************************************************* */ #include "led/bsp_led.h" #include "MCU_Periphlib.h" /* ********************************************************************************************************* ********************************************************************************************************* */ #include "bsp_dly/bsp.h" #include "bsp_init.h" #include "flashaddr.h" #include "bsp_spi_flash.h" #include "sys_app.h" /* ********************************************************************************************************* ********************************************************************************************************* */ #define SPI_FLASH_MEM_ADDR 0xC0000000 // #define DEBUG_BAUD_RATE (921600) // /* ********************************************************************************************************* ********************************************************************************************************* */ volatile uint8_t aux_buf[FLASH_EARSE_PAGESIZE] __attribute__ ((aligned (32))); volatile uint8_t aux_buf2[FLASH_EARSE_PAGESIZE] __attribute__ ((aligned (32))); /* ********************************************************************************************************* ********************************************************************************************************* */ void System_User_ParamInit (void) { w25qxx_param_init(); } /* ********************************************************************************************************* ********************************************************************************************************* */ void spi_sys_init(void) { // SystemInit(); //参数清空 System_User_ParamInit(); //时钟初始化函数 System_Init(); //获取systick的频率 bsp_Get_SystickParam(); /* 初始化外设 */ bsp_Init(); // uart_init(400,DEBUG_BAUD_RATE); //sfud的rtos系统 sfud_set_rtos(1); // w25qxx_driver_init(); //led灯初始化 BSP_RTOS_GPIO_Init(); // BSP_RTOS_Led_On(); // } /* ********************************************************************************************************* * 函 数 名: Init * 功能说明: Flash编程初始化 * 形 参: adr Flash基地址,芯片首地址。 * clk 时钟频率 * fnc 函数代码,1 - Erase, 2 - Program, 3 - Verify * 返 回 值: 0 表示成功, 1表示失败 ********************************************************************************************************* */ int Init (unsigned long adr, unsigned long clk, unsigned long fnc) { spi_sys_init(); return 0; } /* ********************************************************************************************************* * 函 数 名: UnInit * 功能说明: 复位初始化 * 形 参: fnc 函数代码,1 - Erase, 2 - Program, 3 - Verify * 返 回 值: 0 表示成功, 1表示失败 ********************************************************************************************************* */ int UnInit (unsigned long fnc) { // spi_sys_init(); // return (0); } /* ********************************************************************************************************* * 函 数 名: EraseChip * 功能说明: 整个芯片擦除 * 形 参: 无 * 返 回 值: 0 表示成功, 1表示失败 ********************************************************************************************************* */ int EraseChip (void) { // spi_sys_init(); // printf("EraseChip \r\n"); // w25qxx_chiperase(); return 0; } /* ********************************************************************************************************* * 函 数 名: EraseSector * 功能说明: 扇区擦除 * 形 参: adr 擦除地址 * 返 回 值: 无 ********************************************************************************************************* */ int EraseSector (unsigned long adr) { // spi_sys_init(); // printf("EraseSector adr: %x \r\n",adr); // if(adr>=SPI_FLASH_MEM_ADDR) { adr -= SPI_FLASH_MEM_ADDR; w25qxx_sector_erase(adr); } return 0; } /* ********************************************************************************************************* * 函 数 名: ProgramPage * 功能说明: 页编程 * 形 参: adr 页起始地址 * sz 页大小 * buf 要写入的数据地址 * 返 回 值: 无 ********************************************************************************************************* */ int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf) { uint32_t result=0; uint32_t size_shi=0; uint32_t size_ge=0; uint32_t i=0; uint8_t *pbuf=(uint8_t *)buf; // spi_sys_init(); // size_shi=sz/FLASH_EARSE_PAGESIZE; // size_ge =sz%FLASH_EARSE_PAGESIZE; // usr_printf("ProgramPage adr:0x%x ,sz: %ld ,buf :0x%x \r\n",(uint32_t)adr,sz,(uint32_t)pbuf); // if(adr>=SPI_FLASH_MEM_ADDR) { if(size_shi>0) { for(i=0;i<size_shi;i++) { w25qxx_write_buff((pbuf+i*FLASH_EARSE_PAGESIZE),(adr-SPI_FLASH_MEM_ADDR)+i*FLASH_EARSE_PAGESIZE,FLASH_EARSE_PAGESIZE); } } // if(size_ge>0) { w25qxx_write_buff((pbuf+size_shi*FLASH_EARSE_PAGESIZE), (adr-SPI_FLASH_MEM_ADDR)+size_shi*FLASH_EARSE_PAGESIZE, size_ge); } // } return (0); } /* ********************************************************************************************************* * 函 数 名: Verify * 功能说明: 校验 * 形 参: adr 起始地址 * sz 数据大小 * buf 要校验的数据缓冲地址 * 返 回 值: - ********************************************************************************************************* */ unsigned long Verify (unsigned long adr, unsigned long sz, unsigned char *buf) { volatile unsigned char *psrc=buf; volatile unsigned long i; uint32_t result=0; uint32_t size_shi=0; uint32_t size_ge=0; uint32_t j=0; uint8_t *pbuf=(uint8_t *)aux_buf; // spi_sys_init(); // size_shi=sz/FLASH_EARSE_PAGESIZE; // size_ge =sz%FLASH_EARSE_PAGESIZE; // printf("start verify :0x%x ,0x%x,%d ,0x%x\r\n",(uint32_t)adr,(uint32_t)sz,(uint32_t)sz,(uint32_t)buf); // if((sz> 0)&&(adr>=SPI_FLASH_MEM_ADDR)) { // if(size_shi>0) { for(i=0;i<size_shi;i++) { // memset((uint8_t*)pbuf,0,FLASH_EARSE_PAGESIZE); // w25qxx_fast_read((pbuf),(adr-SPI_FLASH_MEM_ADDR)+i*FLASH_EARSE_PAGESIZE,FLASH_EARSE_PAGESIZE); // for(j = 0; j< FLASH_EARSE_PAGESIZE; j++) { if(aux_buf[j] != psrc[j+i*FLASH_EARSE_PAGESIZE]) { // usr_printf("erroffset:%d base addr:%x addr:%lx data--read:%x write:%x\r\n", (uint32_t)(j+i*FLASH_EARSE_PAGESIZE),SPI_FLASH_MEM_ADDR,adr,aux_buf[j],psrc[j+i*FLASH_EARSE_PAGESIZE]);
评论
    相关推荐
    • 程序员算法
      这是一个算法文档压缩包,其中包括《可能与不可能的边界》、《具体数学》、《算法的乐趣》、《啊哈!算法》。这些书很适合对算法感兴趣的朋友,书籍讲解算法非常有趣。注意,其中有些文档是试读版本。
    • 算法实验
      算法实验算法实验算法实验算法实验算法实验算法实验算法实验算法实验
    • 大数据算法
      本书共分为10章,第1章概述大数据算法,第2章介绍时间亚线性算法,第3章介绍空间亚线性算法,第4章概述外存算法,第5章介绍大数据外存查找结构,第6章讲授外存图数据算法,第7章概述MapReduce算法,第8章通过一系列...
    • 算法
      算法 算法
    • SIFT 算法
      SIFT 算法SIFT 算法SIFT 算法SIFT 算法
    • RSA算法
      RSA算法是公钥加密算法中重要的算法之一,本算法即实现RSA的加解密过程。
    • 分词算法介分词算法
      算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语...
    • unify算法
      unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法
    • 寻路算法
      寻路算法 寻路封装
    • dsp算法算法算法算法
      dsp各种算法