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
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,ARDUINO SPI驱动SST25VF016B的具体步骤如下: 1. 首先,确保你的ARDUINO板上已经连接了SST25VF016B芯片。这个芯片是一个16 Mbit的串行闪存器件,通过SPI总线进行通信。 2. 在ARDUINO IDE中,导入SPI库。SPI库提供了与SPI设备进行通信的函数和方法。 3. 设置SPI引脚。在ARDUINO板上,SPI通信需要使用特定的引脚。根据你的ARDUINO板型号,设置正确的引脚。 4. 初始化SPI总线。在ARDUINO的setup()函数中,使用SPI.begin()函数初始化SPI总线。 5. 设置SST25VF016B的工作模式。SST25VF016B芯片有几种不同的工作模式,例如读取模式、写入模式和擦除模式。根据你的需求,选择正确的模式。 6. 通过SPI总线发送指令和数据。使用SPI.transfer()函数发送指令和数据到SST25VF016B芯片。根据SST25VF016B的数据手册,选择正确的指令和数据格式。 7. 读取或写入数据。根据你的需求,使用SPI.transfer()函数读取或写入数据到SST25VF016B芯片。 8. 结束SPI通信。在ARDUINO的loop()函数中,使用SPI.end()函数结束SPI通信。 下面是一个示例代码,演示了如何在ARDUINO上使用SPI驱动SST25VF016B芯片进行读取操作: ```cpp #include <SPI.h> #define SST_CS_PIN 10 void setup() { SPI.begin(); pinMode(SST_CS_PIN, OUTPUT); digitalWrite(SST_CS_PIN, HIGH); // 禁用芯片 } void loop() { digitalWrite(SST_CS_PIN, LOW); // 使能芯片 SPI.transfer(0x03); // 发送读取指令 SPI.transfer(0x00); // 发送地址高位 SPI.transfer(0x00); // 发送地址低位 byte data = SPI.transfer(0x00); // 读取数据 digitalWrite(SST_CS_PIN, HIGH); // 禁用芯片 // 处理读取到的数据 // ... delay(1000); // 延迟1秒 } ``` 请注意,以上代码仅供参考,具体的实现可能因ARDUINO板型号和SPI设备的不同而有所差异。请根据你的具体情况进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值