没有合适的资源?快使用搜索试试~ 我知道了~
flash at45db161d 驱动模块源码.C.doc.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 171 浏览量
2021-11-10
21:47:37
上传
评论
收藏 160KB DOC 举报
温馨提示
试读
16页
flash at45db161d 驱动模块源码.C.doc.doc
资源详情
资源评论
资源推荐
a s h
a t 4 5 d b 1 6 1 d 驱动
模块 源 码 . C . d o c
------------------------------------------作者 xxxx
------------------------------------------日期 xxxx
【精品文档】
声明: 希望使用者保留本人的相关信息,当然了,要面试时用除外,呵呵
/********** 模块注释 ************************************************
*********
模块名:
模块功能: 提供操作 flash:AT45DB161D 的必要的接口,简单明了.
存在问题: 1) 如果突然断电,很可能要会丢掉 1page 数据,
原来的模块也存在这样的问题, 电脑 windows 系统也有.
2) 没有考虑坏页的问题.
把 flash 的两个 ram 分别用作 wbuf 和 rbuf.
全局设定:
全局依赖: 与 flash 芯片通信的驱动模块
编程语言: ANSI C
作者及日期: 练达荣 2015/06/18
版本:
修改及日期:
*********************************************************************
**********/
#include <STC15F2K60S2.H>
#include <string.h>
#include "../delay.h"
#include "../uart.h"
#include "../stc_spi.h"
#define __DELCALE_IN_THIS_FILE__
#include "at45db161d.h"
//#define DEBUG_THIS_MODULE
#if 0//def DEBUG_THIS_MODULE
#define DEBUG_uart1_Sendbuf(buffer,bytes16)
uart1_Sendbuf(buffer,bytes16)
#define DEBUG_uart1_SendString(str)
uart1_SendString(str)
#define DEBUG_uart1_SendByte(dat8)
uart1_SendByte(dat8)
#else
#define DEBUG_uart1_Sendbuf(buffer,bytes16)
#define DEBUG_uart1_SendString(str)
#define DEBUG_uart1_SendByte(dat8)
#endif
【精品文档】
【精品文档】
/////////////////////////////////////////// 移植相关 /////////////////////////////////////////////////////////////////
//////////
#define SPI_CS P12 //外部 flash SPI 使能信号
#define Select_Flash() SPI_CS=0
#define UnSelect_Flash() SPI_CS=1
#define write1Byte(x) spi_WriteRead1Byte(x)
#define read1Byte() spi_WriteRead1Byte(0)
/////////////////////////////////////////// FLASH 操作命令 /////////////////////////////////////////////////////
//////////////////////
#define PAGE_TO_B1_XFER 0x53 // main
memory page to buffer 1 transfer
#define PAGE_TO_B2_XFER 0x55 // main
memory page to buffer 2 transfer
#define PAGE_TO_B2_COMP 0x61 // main
memory page compare to buffer 2
#define B2_TO_PAGE_WITH_ERASE 0x86 // buffer 2
to main memory page program with built-in erase
#define STATUS_REGISTER 0xD7
#define BUFFER_1_READ 0xD1 // D4
buffer 1 read (change to 0xD4 for SPI mode 0,3)
#define FLASH_CMD_ReadID 0x9f // 读取芯
片 32 位 ID.
#define BUFFER_2_WRITE 0x87 // buffer 2
write
#define BUFFER_2_READ 0xD3 // D6
buffer 2 read (change to 0xD6 for SPI mode 0,3)
/////////////////////////////////////////// 纯软件部分 /////////////////////////////////////////////////////////////
//////////////
typedef struct
{
UINT16 pageIdRead; // [0~4095] 当前读的页地址
UINT16 pageIdWrite;// [0~4095] 当前写的页地址
}T_FlashCtrl;
static T_FlashCtrl ctl;
typedef enum
{
E_ReadBuffer,
E_WriteBuffer
【精品文档】
【精品文档】
}ET_BufReadWrite;
/
*********************************************************************
*******************
* Function: 检测并等待器件忙状态
* Description: 过读状态寄存器来检测忙状态
* Calls: -
* Input: -
* Output: -
* Return:
************************
*****************************************************************/
static void FLASH_Wait_Busy(void)
{
Select_Flash();
write1Byte(STATUS_REGISTER);
while(1)
{
if(read1Byte() & 0x80) //读取的最高位 1 时器件忙
break;
}
UnSelect_Flash();
}
/
*********************************************************************
*******************
* Function: 缓冲区(write buffer)数据与 FLASH 指定页比较
* Description: 状态寄存器 bit 6 为 0 表示比较数据想匹配,1 表示比较数
据不相匹配
* Calls: -
* Input: -
* Output: TRUE 不相同
FALSE 相同
* Return:
************************
*****************************************************************/
static UINT8 flash_buffer_compareUnsame(UINT16 page)
{
Select_Flash();
write1Byte(PAGE_TO_B2_COMP);
write1Byte((UINT8)(page >> 6));
write1Byte((UINT8)(page << 2));
write1Byte(0x00);
【精品文档】
剩余15页未读,继续阅读
jianchione
- 粉丝: 0
- 资源: 6万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0