SPI实现SST25VF016B驱动(Flash)

本文介绍了如何在STM32F103微控制器上通过SPI接口实现对SST25VF016B Flash芯片的驱动,包括数据的写入和读取操作。在驱动实现中,特别提到了未加擦除成功判断的问题,通常写入失败源于擦除不成功,建议通过特定地址的特征字检查或CRC校验来确保操作的准确性。同时,文中强调了在执行写入操作时需防止中断干扰。
摘要由CSDN通过智能技术生成

本文在STM32F103上实现SSH25的驱动,实现数据的写入和读取:

1:此驱动未加擦除时候是否擦除成功的判断,一般写入FLASH不成功的最大原因就是擦除不成功,所以一般特选FLASH里面的一个地址存储一个特征字,比如0x12,当执行完操作擦除命令后,去判断这个特征字是否被擦除为0xff,如果擦除成功,执行写指令,当然,也可以进行CRC校验,判断写入和读取的是否一致;

2:FLASH的写入时,避免被中断打断;

main.c

#include "stdio.h"
#include "sys.h"
#include "USART_Init.h"
#include "SST25_SPI_Init.h"

u8 SSH_Buff[20];
u32 baud_menu[] = {1200,2400,3840,4800,5760,9600,19200,115200};
u16 ARR = 0;

int main()
{
	NVIC_Configuration();                    //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
	delay_init();                            //延时函数初始化
	Usart_Init(9600);   	                   //串口初始化 
	Spi_Init();                              //SPI1/SSH25初始化

	Write_State_Register(0X00);              //写状态寄存器为0x00,取消写保护,上电默认全片保护
	Block_Clear(Clear_4_K,10);               //擦除4K扇区
	Write_Mul_Byte(0,"sunshine",8);          //将"sunshine"字符串写入扇区0       
	Read_Data(0,8,SSH_Buff);                 //将扇区0开始8个字节读进SSH_Buff
	Usart_Send_Data(SSH_Buff,8);             //发送串口打印
	delay_ms(1000);
}
SSH_SPI_Init.h
#ifndef SSH25
#define SSH25

#include <stm32f10x.h>
#include "delay.h"

extern u8 ID[3];

typedef enum
{
	Clear_4_K = 0,
	Clear_32_K = 1,
	Clear_64_K = 2,
	Clear_ALL_FLASH = 3,
}Block_Cnt;

#define CS_LOW()  GPIO_ResetBits(GPIOC, GPIO_Pin_4)
#define CS_HIGH() GPIO_SetBits(GPIOC,GPIO_Pin_4)

/*未使用*/
#define HOLD_LOW() 
#define HOLD_HIGH() 

/*未使用*/
#define WP_LOW()
#define WP_HIGH()

//函数申明
void Spi_Init(void);
u8 Read_State_Register(void);
void Wait_Busy_Clear(void);
void Write_State_Register(u8 dat);
void Write_Enab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值