"); //-->
AT45D081/AT45DB021/AT45DB0xx驱动程序(C语言)用于大型存储的串行Flash
/*---------------------------------------------------------
版 本: V2.2
作 者:梁衍龙
创作时间:2002年9月
==========================================================*/
#i nclude "reg51.h"
#i nclude "intrins.h"
#define NOP() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
sbit SPI45D081_CS =P1^5;//片选接口
sbit SPI45D081_SK =P1^6;//时钟接口
sbit SPI45D081_DI =P1^7;//数据输入接口
sbit SPI45D081_DO =P1^4;//数据输出接口
delay(unsigned int t)
{
while(t--);
}
// SPI_SK上升沿数据有效 _/-
SPI45D081_WriteBits(unsigned char byte,unsigned char num_of_bits)
{
unsigned char count;
byte=byte<<(8-num_of_bits);
for(count=0;count<num_of_bits;count++)
{ SPI45D081_SK=0;
byte<<=1;
NOP();
SPI45D081_DI=CY;
NOP();
SPI45D081_SK=1;
NOP();
}
}
// SPI_SK下降沿数据有效 -\_
unsigned char SPI45D081_ReadByte()
{
unsigned char count,byte;
for(count=0;count<8;count++)
{ SPI45D081_SK=1;
NOP();
byte<<=1;
SPI45D081_SK=0;
NOP();
if(SPI45D081_DO) byte++;
NOP();
}
return(byte);
}
//Main Memory Page to Buffer 1 Transfer
void PageToBuffer1(unsigned int page)
{
SPI45D081_SK=1; //?? start
NOP();
SPI45D081_CS=0; //start
NOP();
//send 8 bit opcode, Main Memory Page to Buffer 1 Transfer: 0x53
SPI45D081_WriteBits(0x53,8);// fill 3 sk,don't care.
SPI45D081_WriteBits(0x00,3);//send 12 bit address to 45D081
SPI45D081_WriteBits( (unsigned char)(page>>8) , 4 );
SPI45D081_WriteBits( (unsigned char)(page) , 8 );
// fill 9 sk,don't care.
SPI45D081_WriteBits( 0x00 , 4 );
SPI45D081_WriteBits( 0x00 , 5 );//total 32 bit
SPI45D081_CS=1; // end
delay(200);}//
unsigned char ReadDataFromBuffer1(unsigned int address)
{
unsigned char dat;
SPI45D081_SK=1; //?? start
NOP();
SPI45D081_CS=0; //start
NOP();
//send 8 bit opcode:0x54
SPI45D081_WriteBits(0x54,8);// fill 15 sk,don't care.
SPI45D081_WriteBits(0x00,8);
SPI45D081_WriteBits(0x00,7);//send 9 bit address to 45D081 buffer1
SPI45D081_WriteBits( (unsigned char)(address>>8) , 1 );
SPI45D081_WriteBits( (unsigned char)(address) , 8 );//fill 8 bits blank
SPI45D081_WriteBits( 0x00 , 8 );// receive data
dat=SPI45D081_ReadByte() ;
SPI45D081_CS=1; // end
return(dat);
}
//注:该程序适用程度可靠,注意使用的方法和硬件连接方式
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
Microtune陷于财务困境,将拿蓝牙部门开刀
HT47系列PFD的使用 说明及源程序
ISO120与仪表放大器INA105、多路选择器构成的600V电池系统的电池监控电路图
HT48CA0 8位单片机数据手册 V1.30 (英)
这家电池回收公司现在正在为AI数据中心清洁供电
ISO120与PWS740构成的多通道同步隔离系统电路
HT47系列单片机WDT的使用 说明
C 语言在嵌入式系统中实现面向对象编程的实践与探索
MSP430 学习套件(六)
海尔入局人形机器人?周云杰称将与宇树科技谈合作,王兴兴回应亮了
MSP430 学习套件(四)
开普勒机器人完成A轮融资,携手三家行业头部企业
Lam Research:半导体行业的下一个颠覆者
1nm,在路上了
Cirrus演示与多家厂商DVD录制驱动器的互操作性
MSP430 学习套件(五)
HT47系列IR载波的使用 说明及源程序
STM32+A3P125 图形控制器方案,多参数监护仪数据采集模块深度解析
MSP430 学习套件(二)
精密隔离放大器ISO122/124引脚图
ISO122/124电源和信号的基本连接电路图
深度解读CHIPS法案最终法规对纳税人的友好规定
MSP430 学习套件(三)
Kuka推出用于半导体和电子行业的洁净室认证机器人
检测4~20mA环路仪器放大电路图(ISO120、XTR101)
智芯科技向日本模拟IC设计公司Artlogic注资
科大讯飞将牵头制定中文语音标准
四大核心要素驱动汽车智能化创新与相关芯片竞争格局
欧美和笔记本市场火爆,三季度PC出货量增长15.7%
HT47系列蜂鸣器的使用 说明及源程序