串行flash存储器具有体积小、功耗低、管脚少、掉电不丢失数据等诸多优点,在ic卡和便携式智能检测仪表中广泛的应用。本文将介 绍一种通过51系列单片机的串行口与at45d041芯片通讯的方法,此方法不仅编程简单,且运行速度高,是一种值得推荐的编程方法。
1 at45d041的工作原理
at45d041是具有4 325 376位的大容量存储器,他们被分成2 048页(对应地址为pal0一pa0),每页264b(对应地址ba8~ba0)。这些存储器被称之为主存储器,此外at45d041还有2个264 b的缓冲区bufferl和buffer2,当主存储器的某页正在被使用时,这2个缓冲区允许接收数据。当片选cs有效时,数据的传输在时钟信号sck的同步下,通过si(输入)和so (输出) 进行。其原理框图如图1所示。
表1为包含at45d041芯片ic卡管理定义。
at45d041的最大工作频率可达10mhz,工作电压为5 v±10%,工作最大电流读为25 ma,写为50 ma,数据保持可达100年,工作温度为0~70℃,根据要求可超过指定工作温度,通讯协议为spi串行接口方式0和方式3。
2 at45d041与at89c55的接口
由于at45d041只有一个管脚进行命令、数据的输入和数据的输出,其命令和数据都是串行输入的,工作时序图如图2所示。
从图2可以看出,输入数据时,sck的上升沿前后一段时间分别为建立时间tsu (>10 ns)和保持时间th (>25 ns),输入接口应在sck上升前tsu时段内将数据准备好,并在其后的th时段内保持该数据。输出数据时,so仅在sck下降沿rv (<80 ns)时间后有信号输出,并在下一个时钟下降沿到来时消失(tho=0),接口电路应在有效输出时间内读取数据。
51系列的单片机都具有至少一个全双工串行接口,他支持4种工作方式,这里采用方式0,作为移位寄存器输入输出。其工作时序图如图3所示。
串行口以振荡频率的1/12波特率接收和发送数据,rxd为串行数据输入输出端,txd为同步移位信号输出端。
本系统采用at89c55单片机芯片实现与at45b041的接口,负责传感器信号的采集、存储与读取及显示,其硬件接口电路图如图4所示。
图4中p1.0接ic卡的cs信号,p1.1接r/b信号,p1.2接rst信号,ic卡的sck接单片机的txd,si和so接在一起与单片机的rxd相连。p0口接ad(模数转换)芯片和lcd(液晶显示屏),p2口接键盘。
工作原理是,ad采样数据一方面通过单片机直接存入ic卡,另一方面通过计算显示在液晶屏上。系统的采样速度要求达到1khz,这对于12mhz主频的at89c55单片机速度要求很高,这就要求花在存储方面的时间尽量少。因系统不需要与外界通信,单片机的串口闲置,这样,可以考虑利用单片机的串口,来提高存储速度。由于at45d041只支持spi通讯的模式0和3,而at89c55单片机支持移位寄存器输入/输出工作方式。这样可以把at45d041当作移位寄存器来操作。但51系列单片机的串口都是先输出低位,后输出高位。这与at45d041的定义正好相反。为此在通过uart输出数据之前必须将其进行转换。当然,通过查表可以解决这一难点。
3 单片机编程
下面以一个检测ic卡状态的c语言程序来说明对这种存储器的编程方法。(关于at45d041存储器的操作时序及命令,参阅at45d041的器件说明书。)
//定义查表矩阵 unsigned char code concode[256]={ 0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10, 0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0, ... ... 0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0xlf,0x9f,0x5f,0xdf,0x3f,oxbf,0x7f,oxff}; //检查ic的有效性函数bit testcard(void){ unsigned char tmp; cs45=0; scon=0; sbuf=concode[0x57]; //读状态寄存器命令为0x57 while(!ti); scon=0x10; while(!ri); tmp=concode[sbuf]; //tmp内为状态寄存器值 cs45=1 if((tmp&0x38)==0x18) return (0); //是at45d041卡,返回0 return(1); //不是at45d041卡,返回1 }
at45d041芯片的状态寄存器结构如下:
位7为0表示忙;为1表示闲,可以接收下一条指令。 位6为0表示主存储区数据与缓存区比较匹配,否则为不匹配。 位5、位4、位3对于at45d041为011”(二进制)。
4 总体性能评价
在此系统中,单片机需采样8路12位信号,并把他们保存在数据ic卡中。只需带回ic卡,通过ic卡读写器把数据读入计算机,便可以进行数据的离线处理、分析。可以看出,仅采用几个廉价芯片,便组成一个性能可观的数据采集系统。
从以上程序可以看出,数据传送的速率基本上与单片机的机器周期相同。而通过以前的i/o端口模拟spi端口的操作中,数据传送的速率最大不到机器周期的1/3。另外,在串口传送数据的过程中,cpu还可以同时进行其他的指令。总体性能要比采用i/o端口模拟spi端口的操作快上4倍以上。
在以上的快速数据采集系统中,花在存储方面的时间相对很少,这样,一方面数据采集的速率可以提高;另一方面单片机有充足的时间计算、分析数据,处理lcd显示,键盘中断等。减少存储所花的时间,对整体性能的提高有着显著的意义。
当然,采用以上方式操作spi口,需要对所操作的芯片的操作时序比较了解,如果操作失误,可能产生线路冲突(单片机和spi口同时输出)。这样虽然对器件没有多大的损害,因为芯片端口都有保护电路。当然最好是采用带有spi端口操作的单片机,这里是对某些情况下不得已采用的方法,也有一定的实用价值。
关于100G QSFP28 ZR4光模块产品介绍
空调价格战打的火热 零售巨头们补贴不断
人类社会对人工智能的兴起都毫无准备,我们现在是处于人类历史新阶段的边缘吗?
还是2016款三星A8好 中端机型的小屏旗舰主打
选择合适的工业连接器需要做的3件事情
串行Flash存储器的编程解决方案
长安汽车11月销量为22.73万辆,同比增长23.01%
iPhone12Pro Geekbench5跑分出炉
华为徐直军:华为不造车,将聚焦ICT技术帮助车企造好车
COAST借助LeddarTech“Cocoon”激光雷达优化自动驾驶安全性能
多晶硅和单晶硅的区别是什么
小米5c评测:你是选择小米5C还是魅蓝Note3皇帝版?我们先来比比看
杭州安防企业大盘点 这些企业都不可小觑
资产上链是否会为区块链行业带来一丝温暖?
Arm 32位MCU助力舵机行业产品升级
OLED显示技术的介绍
京东正式宣布成立京东农牧公司,进军养猪业
MEMS麦克风应用的三波浪潮
基于蜂窝联网的无人机监管带来哪些好处?
2018年十大编程语言是什么呢?