基于ARM芯片的PDA系统中硬件设计实现
0 引 言
随着CPU技术的进一步发展,基于ARM平台的32位嵌入式PDA技术也得到了很大的发展。PDA已经从原来简单意义上的个人数字助理,变成了人们离不开的随身工具。该设计基于ARM平台的STR710CPU。主要完成了其硬件电路的设计及实现并通过编程实现液晶显示器、NANAD_FLASH的驱动的设计并在此基础实现PDA的图形操作。
l 系统设计及功能模块
设计中主要采用ARM平台的32位处理器STR710,NAND512W3,MAX4468语音数据采集芯片以及LCD液晶显示器,在完成硬件电路的基础上编写程序实现LED显示器及NAND_FLASH驱动。系统采用STR710单片机设计实现PDA系统具有很高的性价比和可靠性特别是在A/D采集上具有12位的精度非常适合工业和手持设备使用。
1.1 STR710及NAND512W3主要芯片功能介绍
ST ARM微控制器集成了常用的各种外设,弥补了其他许多ARM微控制器的不足,可以大大简化系统硬件设计。在设计中采用NAND_FLASH是由于在PDA系统中一般需要存放大量代码及数据而NAND512W3系列芯片正好具有很高的存储密度、可擦写性能好、稳定性好等优点很适合作PDA的存储芯片,而且具有很高的性价比。
1.2 STR710与各芯片的功能模块及接口电路设计
在系统中PDA主要有以下功能:通过CPU的控制实现LCD显示屏的显示控制,NAND_FLASH的存储操作、并实现数据的FATl6格式存储,数据ADC采集,USB接口的识别及控制键操作等功能模块主要功能模块如图l所示。
1.3 STR710与主要外围芯片接口电路
1.3.1 NAND_FLASH接口电路
设计采用STR芯片的BANK3作为NAND_FLASH的外部存储I/O口,主要引脚ALE,CLE引脚与处理器的P2.5,P2.6连接作为地址和命令锁寸引脚的I/O口;读、写使能RE,WE引脚与nRD和nWE连接;I/O口与处理器的D0~D7连接用于数据传输。图2为NAND_FLAsH与STR710的典型接口连接图。
在设计NAND_FLASH与STR710的接口电路图时不能将电路设计为ALE,CLE,WP,R/B全部连接到STR710的地址线上。这样在写入命令或地址时会引起CLE和ALE(对应MCU的地址线)在写信号WE的上升沿锁存时保持时间至少应达到10 ns,而MCU的芯片说明中写信号WE发出之后,地址线在WE的上升沿后的保持时间只有3 ns,这样两者之间会造成时序的不匹配,无法正确操作NAND_FLASH。在设计时需采用将上述引脚与CPU的GPIO引脚连。
1.3.2 LCD接口电路
该设计采用160×160像素LCD液晶显示器,R18是一个滑动变阻器可用于液晶显示器进行灰度的调节,LCD片选信号与处理器的P2.O引脚连接,图3为LCD显示的典型接口电路。
完成硬件电路设计并调试通过后主要针对以下3方面的软件编程功能实现:
对硬件电路(CPU及主要外围电路)的初始化,NAND_FLASH驱动程序和LCD驱动程序的编写及实现。
2.1 系统的初始化
初始化硬件电路主要完成STR7lO各寄存器的配置及内存映射和中断向量配置、处理器与外芯片的初始化以及功能库函数加载等。其主要步骤是首先调用71x_init.s源文件完成CPU各寄存器的初始化配置后中断异常的处理实现及中断优先级设置、系统堆栈和变量的初始化最后完成初始化后使用BL语句跳转至MAIN功能函数:IMPORT main;B main;main为C语言主函数入口。初始化流程图如图4所示。
2.2 NAND_FLASH驱动程序
NAND_FLASH的驱动主要包括芯片的复位,ID的正确读取,块的擦除,和页的写入和读取几个操作。此外NAND_FLASH允许要2%的坏块,在编写驱动时要做好NANDFLASH的坏块的统计与管理,坏块的识别主要是读取块中第一页的第6字节的1个WORD是否为FF来判断块的好坏。为了便于统计坏块和存储管理须在调用NAND_FLASH内存管理函数时建立坏块统计表,系统不断使用会增加坏块的数量,在每次系统启动时都可以通过调用内存管理函数来更新坏块表实现对内存的最优管理以提高系统的性能。坏块管理流程如图5所示。
NAND_FLASH驱动主要步骤:
(1)向指令寄存器写入0xFF使芯片复位;
(2)调用Unsigned int check_Flash_Id(void)函数读取芯片ID:
For(i=0;i<10;i++);id=Nand_IO<<8;id+=Nand_IO; //读出2个字节即芯片ID
(3)调用NAND_manage()函数做坏块管理;
(4)调用Unsigned int Erase_Block(unsigned intblock)实现块的擦除;
(5)调用int Write_page()和int Read_page()写入和读出页数据。
2.3 LCD驱动程序设计
在系统中LCD驱动程序主要是对屏幕显示的初始化包括字符显示高度和宽度、行字符显示数、显示频率的设置以及显示点位移设置、显示合成设置、休眠模式设置、光标形状设置、光标指针设置等操作。
LCD驱动LCD_Initialize(void)主要步骤:
(1)调用LCD_WriteCommand(SYSTEM_SET);用于系统初始化。
(2)调用LCD_WriteCommand(SCROLL);用于显示域设置。
(3)调用LCD_WriteCommand(HDOT_SCR);用于光标点位移设置。
(4)调用LCD_WriteCommand(OVLAY);用于显示合成设置。
(5)调用LCD_WriteCommand(CSRFORM);
LCD_WriteData(0x07);LCD_WriteData(0x87);用于初始化光标形状。
设计好驱动后利用ADSl.2编译器将程序烧至RAM进行调试,可根据屏幕显示字符尺寸大小及适宜程度再做修改驱动程序直至满意。
3 系统调试
当设计好硬件系统后,要对电路板进行整体调试看各功能模块是否正常,值得注意的是在设计NAND_FLASH接口电路时不能将ALE,CLE,WP,R/B全部连接到STR710的地址线上否则会引起两者间的时序不匹配。在设计NAND_FLASH文件系统时采用F16系统可根据系统需要修改ST公司提供的F16文件系统代码。
4 结 语
该设计是基于ARM芯片的STR710嵌入式PDA系统,很好实现了硬件系统的设计以及LCD显示器、NAND_FLASH的驱动程序、基于F16文件系统在NAND_FLASH大容量数据的文件存储管理。随着信息化、智能化、网络化的快速发展,嵌入式PDA技术也将获得广阔的发展空间。
|