STM32 硬件SPI方式读写AT45DB161D

2019-12-30 19:23发布

这是一个简易的读写,所有操作倾向与对页的操作
关于对扇区,对块的操作,请参考手册自行更改

代码参考了彩虹大虾的代码

#ifndef _SPI_FLASH_H_
#define _SPI_FLASH_H_  1
#include "stm32f10x_lib.h"

#define FLASH_CHREAD 0x0B
#define FLASH_CLREAD 0x03
#define FLASH_PREAD        0xD2

#define FLASH_BUFWRITE1 0x84
#define FLASH_IDREAD 0x9F
#define FLASH_STATUS 0xD7
#define PAGE_ERASE 0x81
#define PAGE_READ 0xD2
#define MM_PAGE_TO_B1_XFER 0x53                                // 将主存储器的指定页数据加载到第一缓冲区
#define BUFFER_2_WRITE 0x87                                        // 写入第二缓冲区
#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86        // 将第二缓冲区的数据写入主存储器(擦除模式)

#define Dummy_Byte 0xA5

/* Select SPI FLASH: ChipSelect pin low  */
#define Select_Flash()     GPIO_ResetBits(GPIOB, GPIO_Pin_2)
/* Deselect SPI FLASH: ChipSelect pin high */
#define NotSelect_Flash()    GPIO_SetBits(GPIOB, GPIO_Pin_2)



void SPI_Flash_Init(void);        //SPI初始化
u8 SPI_Flash_ReadByte(void);                //flash操作基本函数,读一个字节
u8 SPI_Flash_SendByte(u8 byte);                //        FLASH操作基本函数,发送一个字节
void FlashPageEarse(u16 page);        //擦除指定的页,页范围0-4095

void FlashPageRead(u16 page,u8 *Data);                //读取整页,页范围0-4095
void FlashPageWrite(u16 page,u8 *Data);                //写一整页,页范围0-4095


void FlashWaitBusy(void);                        //Flash忙检测
void FlashReadID(u8 *ProdustID);                //读取flashID四个字节

#endif

完整代码:点击此处下载 ourdev_443088.rar(文件大小:2K) (原文件名:SPIFlash.rar)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
panda1988
1楼-- · 2019-12-31 16:21
回复【6楼】challenger86
-----------------------------------------------------------------------

谢谢啦!我正在研究,但想问一下大虾们:data flash是什么意思啊?和code flash有什么区别?
xzhwq
2楼-- · 2019-12-31 17:31
好东西,谢谢
benkye
3楼-- · 2019-12-31 17:45
 精彩回答 2  元偷偷看……
huanyou
4楼-- · 2019-12-31 20:59
请教楼主,我的SPI可以读AT45DB161D,但是写的时候中有发送状态命令,可以总在状态中等待循环,是什么问题?
kingsabbit
5楼-- · 2019-12-31 22:19
先下载,再学习,ATMEL的这块东西很怪
kingsabbit
6楼-- · 2019-12-31 23:25
wenming 老王,把你的AT45DB161共享一下吧

一周热门 更多>