我已经调通了flash。
现在我的需求是这样:
我每隔1分钟存储一次信息,包括:时间,应力,信号幅值。。。。。大概100字节。
这样存最多可以存半个月的信息吧。
会有上位机软件不定期向我获取flash里的信息。它的指令里会给我两个时间参数,我要把这段时间内的历史数据发给上位机。
我的问题是这样:
1,如何把指令里的时间段和我的FLASH存储地址对应起来
2,考虑到停电的情况,flash里存储的信息并不是连续的。也就是说我要知道上位机想要获取的时间段内我自身有没有掉电。
3,半个月后我会用新的信息把最老的信息覆盖掉,这就导致flash最早的有效信息不一定在哪个地址上。
因为以前没做过这样的事,感觉有点思路但还是很乱。
请有经验的前辈指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
/****************************************Copyright (c)**************************************************
**
** http://www.powermcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: SST25VF016B.h
** Last modified Date: 2010-10-29
** Last Version: 1.0
** Descriptions: SPI flash 操作函数
**
**------------------------------------------------------------------------------------------------------
** Created By: AVRman
** Created date: 2010-10-29
** Version: 1.0
** Descriptions: First version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#ifndef __SST25VF016B_H
#define __SST25VF016B_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
/* Private typedef -----------------------------------------------------------*/
/* 定义操作SST25VF016B所需的数据 */
typedef enum ERTYPE{Sec1,Sec8,Sec16,Chip} ErType;
typedef enum IDTYPE{Manu_ID,Dev_ID,Jedec_ID} idtype;
/* Private define ------------------------------------------------------------*/
#define MAX_ADDR 0x1FFFFF /* 定义芯片内部最大地址 */
#define SEC_MAX 511 /* 定义最大扇区号 */
#define SEC_SIZE 0x1000 /* 扇区大小 */
/* 宏,用于定义SST25VF016B的片选引脚 */
#define RCC_APB2Periph_GPIO_SPI_FLASH_CS RCC_APB2Periph_GPIOB
#define SPI_FALSH_CS_PORT GPIOB
#define SPI_FALSH_CS_PIN GPIO_Pin_0
#define SPI_FLASH_CS_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_0)
#define SPI_FLASH_CS_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_0)
/* Private function prototypes -----------------------------------------------*/
void SPI_FLASH_Init(void);
uint8_t SSTF016B_RD(uint32_t Dst, uint8_t* RcvBufPt ,uint32_t NByte);
uint8_t SSTF016B_RdID(idtype IDType,uint32_t* RcvbufPt);
uint8_t SSTF016B_WR(uint32_t Dst, uint8_t* SndbufPt,uint32_t NByte);
uint8_t SSTF016B_Erase(uint32_t sec1, uint32_t sec2);
void SPI_FLASH_Test(void);
void df_write_open(uint32_t addr);
void df_write(uint8_t *buf,uint16_t size);
void df_read(uint8_t *buf,uint16_t size);
void df_read_open(uint32_t addr);
void df_write_close(void);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
一周热门 更多>