550 likes | 739 Views
第 5 章 S3C44B0X 接口电路设计与编程. 前面了解 S3C44B0X 的硬件结构,这里我们研究一下它的电路设计及编程方法,更深入地解析 S3C44B0X 的内部结构,同时也了解了基于 EV44B0II 开发板的设计开发思想。. 本章主要介绍:. ⑴ EV44B0II 开发板的存储和 I/O 地址空间分布 ⑵ Boot loader 在存储地址空间的分布情况。
E N D
第 5 章S3C44B0X接口电路设计与编程 前面了解S3C44B0X的硬件结构,这里我们研究一下它的电路设计及编程方法,更深入地解析S3C44B0X的内部结构,同时也了解了基于EV44B0II开发板的设计开发思想。
本章主要介绍: ⑴ EV44B0II开发板的存储和I/O地址空间分布 ⑵ Boot loader在存储地址空间的分布情况。 ⑶电源时钟复位电路、Boot FLASH接口电路、SDRAM接口电路、网络USB及IIS接口电路、键盘数码管接口电路、LCD接口电路、触摸屏接口电路、串行口接口电路、IIC接口电路和A/D等接口电路等的设计及编程等。
5.1 MICETEK EV44B0II开发板简介 EV44B0II是一个适用用于手持设备和一般应用的S3C44B0X处理器的开发平台。 它包括S3C44B0X处理器、8位LCD连接器和触摸屏接口、10MHz外部时钟、1M×16位的Flash、4M×16位的SDRAM、2个RS232串行口、1个JTAG接口、1个并行调试接口、1个RTC、1个IICEEPROM、一个10/100MB网络接口、一个USB接口、一个具有扬声器和麦克的音频接口、一位8段码显示器、1个4×4键盘、特殊功能引脚和总线扩展接口。如图5-1所示
5.1.1 存储地址空间分配 EV44B0II有6个ROM/SRAM bank和2个ROM/SRAM/SDRAM bank,S3C44B0X可以控制总线宽度和存取时间,存取时间由BANKCON0~7,总线宽度由BWSCON配置。bank0作为boot ROM启动存储器,它的总线宽度由OM[1:0]控制,存储器大小端控制由ENDIAN控制,如图5-2所示。存储地址空间分布如图5-3所示。
5.1.1 存储地址空间分配 EV44B0II有6个ROM/SRAM bank和2个ROM/SRAM/SDRAM bank,S3C44B0X可以控制总线宽度和存取时间,存取时间由BANKCON0~7,总线宽度由BWSCON配置。 bank0作为boot ROM启动存储器,它的总线宽度由OM[1:0]控制,存储器大小端控制由ENDIAN控制,如图5-2所示。存储地址空间分布如图5-3所示。
配置程序如下: LDR r0, =SMRDATA LDMIA r0, {r1-r13} LDR r0, =0x01c80000 ; BWSCON Address STMIA r0, {r1-r13} ...... SMRDATA: .word 0x11110092 @ BWSCON .word 0x00000600 @ GCS0, boot ROM .word 0x00007FFC @ GCS1, Ethernet .word 0x00007FFC @ GCS2, USB .word 0x00007FFC @ GCS3, 8-SEG
.word 0x00007FFC @ GCS4, not use .word 0x00007FFC @ GCS5, not use .word 0x00018000 @ GCS6 SDRAM(Trcd=2,SCAN=8) .word 0x00018000 @ GCS7 SDRAM(Trcd=2,SCAN=8) .word 0x00820591 @ Refresh(REFEN=1,TREFMD=0, @ Trp=3.5(D)or4(SD), Trc=5(S), Tchr=3(D), Ref CNT) .word 0x16 @ Bank size, 32MB/32MB .word 0x20 @ MRSR 6(CL=2) .word 0x20 @ MRSR 7(CL=2)
5.1.2 I/O口配置 PA~PG端口引脚配置如表5-2所示,其中TP表示触摸屏,key表示键盘
I/O端口初始化程序如下: void Port_Init(void) { rPCONA=0x1ff; rPDATA=0x0; rPCONB=0x1Cf; rPDATC=0x8400; rPCONC=0x5F5FFFFF; rPUPC=0x33ff; rPCOND=0xaaaa; rPUPD=0xff; rPCONE=0x2552b;
rPUPE=0x0; rPDATE=0X60; rPCONF=0x2A; rPUPF=0x0; rPDATG=0x0; rPCONG=0x55FF; rPUPG=0x0; rSPUCR=0x7; //上拉禁止。 rEXTINT=0x22222022; // EINT7~EINT0下降沿触发。 }
5.1.3 电源、时钟及复位电路 1.电源 EV44B0II系统采用DC 3.3V(最少850mA)供电,3.3V给MCU的I /O接口供电,3.3V经稳压芯片产生一个2.5V电压给ARM内核供电。 2.时钟 系统时钟源可以由晶体和外部时钟提供,它的选择控制由OM[3:2](在nRESET上升沿锁定)来决定。本系统采用10MHz晶体作为时钟源,OM[3:2]=00 EXTCLK=VDD如图5-4所示。
3.复位 nRESET至少保持5个时钟的低电平,当nRESET为高电平时,处理器进行初始化操作。
5.1.4 MBL(Micetek Boot Loader)介绍 MBL是驻留在EV44B0II板的一段小程序, 约80KB。 它可以打通EV44B0II板的通讯端口,如:Ethernet以太网口、USB口和串口,使板可以直接与PC机相连,从而达到下载和调试uClinux或其他应用程序。 它驻留在低2MB的FLASH中,如图5-5所示。
在上电复位时,Flash的基址是0x0。所以MBL就会立刻被启动运行。在上电复位时,Flash的基址是0x0。所以MBL就会立刻被启动运行。 在启动后,MBL把自己的代码拷贝到板子上SDRAM中,其他空间(约7M Bytes)可以用来下载Linux Image文件或其他应用程序,这些程序下载到SDRAM中的默认地址是0x0c008000。如图5-6所示。
5. 2 存储器电路设计及编程 EV44B0II存储系统包括一片1M×16位的FLASH(29LV160TE)和一片4M×16位的SDRAM(KM416S4020B)。
5.2.1 BOOT FLASH电路及编程 1.电路 FLASH连接电路如图 5-7 所示,处理器通过片选nGCS0与片外FLASH芯片连接。 由于是16位的FLASH,所以用CPU的地址线A1~A20来分别与FLASH的地址线A0~A19连接。 Flash的地址空间为0x00000000~0x00200000。
HY29LV160是HYUNDAI公司生产的Flash存储器,其主要特点有:HY29LV160是HYUNDAI公司生产的Flash存储器,其主要特点有: ⑴ 3 V单电源供电,可使内部产生高电压进行编程和擦除操作; ⑵ 支持JEDEC单电源Flash存储器标准和CFMI(Common Flash Memory Interface)特性; ⑶ 只需向其命令寄存器写入标准的微处理器指令,具体编程、擦除操作由内部嵌入的算法实现,并且可以通过查询特定的引脚或数据线监控操作是否完成; ⑷ 可以对任一扇区进行读、写或擦除操作,而不影响其它部分的数据。
2. 29LV160TE芯片擦除 29LV160TE芯片具有3种擦除方式:整片擦除、扇区擦除和快擦除。主要来看进行扇区擦除。 参考表5-3扇区擦除的操作流程,由此我们得到扇区擦除子程序的主体如下:
void F29LV160_EraseSector(int targetAddr) { Uart_Printf("Sector Erase is started!\n"); _RESET( ); //芯片复位 _WR(0x555,0xaa); _WR(0x2aa,0x55); _WR(0x555,0x80); _WR(0x555,0xaa); _WR(0x2aa,0x55); _WR(BADDR2WADDR(targetAddr),0x30); _WAIT( ); //等待擦除结束 _RESET( ); //芯片复位 }
其中 _WR(addr,data)是写入一个字函数。addr 为写入数据的目标地址,由于 data 为 16 位字而不是字节,addr 也是字地址。对处理器而言地址是以字节为单位的,因此,addr 必须加以调整,左移 1 位。 _ WR(addr,data) 函数: #define _WR(addr,data)*((U16 *)(addr<<1))=(U16)data #define BADDAZWADDR(Addr)>>1)
3.编程写入 整片擦除之后,就能够在 flash 的任意地址中进行写入操作了。参考表5-3,得到字写入子程序的主体如下:
int F29LV160_ProgFlash(U32 realAddr,U16 data) { volatile U16 *tempPt; int temp,count=0; tempPt=(volatile U16 *)realAddr; _WR(0x555,0xaa); _WR(0x2aa,0x55); _WR(0x555,0xa0); *tempPt=data; return _WAIT( ); }
在写入操作的最后,有一个判断写入是否完成的_WAIT()的过程。在写入操作的最后,有一个判断写入是否完成的_WAIT()的过程。 在这里我们采用 Toggle bit(翻转位)的方法检测 DQ6 脚的输出,若翻转停止则表示写入完成:
int _WAIT(void) //检测DQ6输出是否停止翻转 { volatile U16 flashStatus,old; old=*((volatile U16 *)0x0); while(1) { flashStatus=*((volatile U16 *)0x0); if( (old&0x40) == (flashStatus&0x40)) break;
if( flashStatus&0x20 ) //测试超时标志位DQ5 { old=*((volatile U16 *)0x0); flashStatus=*((volatile U16 *)0x0); if( (old&0x40) == (flashStatus&0x40) ) return 1; //无翻转 else return 0; //翻转 } old=flashStatus; } return 1; } 详细程序参见EV44B0II实验程序。
1.电路 SDRAM连接电路如图5-8所示,SDRAM分成4个Bank,每个Bank的容量为1M×l6位。 Bank的地址由BAl、BAO决定,00对应Bank0,01对应Bankl,10对应Bank2,11对应Bank3。 在每个Bank中,分别用行地址脉冲选通RAS和列地址脉冲选通CAS进行寻址。 SDRAM由MCU专用SDRAM片选信号nSCS0选通,地址空间为0x0C000000~0x0C800000。
2. 编程 对特定地址的写入和读出操作: #define _WR(addr,data)*((U16 *)(addr<<1))=(U16)data #define _RD(addr)( *((U16 *)(addr<<1)) )
5.3.1 网络接口 SMSC9113同时具备MAC层和PHY物理接口功能芯片,它使用中断通知S3C44B0X数据的发送和接收。 S3C44b0X是使用nGCS1和数据地址线访问SMSC9113的内部寄存器和缓冲区。 TS6121是隔离变压器,板上的LEDA和LEDB指示灯分别表示100M链路正常和网络接收发送,EV44B0II以太网部分的逻辑如图5-9所示。
5.3.2 USB电路 USB 接口电路如图5-10所示。
1.电路接口 IIS即音频数据接口,它是SONY、PHILIPS等电子巨头共同推出的接口标准。 IIS接口电路如图5-11所示。
该系统把IIS接口与PHILIPS公司的UDAl341TS音频数字信号编译码器相连接,得到MICROPHONE音频输入通道和SPEAKER音频输出通道。该系统把IIS接口与PHILIPS公司的UDAl341TS音频数字信号编译码器相连接,得到MICROPHONE音频输入通道和SPEAKER音频输出通道。 UDAl341TS可把立体声模拟信号转化为数字信号,同样也能把数字信号转换成模拟信号,并可用PGA(可编程增益控制)、AGC(自动增益控制)对模拟信号进行处理。 对于数字信号,该芯片提供了DSP数字音频处理功能。在实际中,UDAl341TS可广泛应用于MD、CD、Note—Book、PC和数码摄像机等。
S3C44B0X的IIS接口可与UDAl341TS的BCK、WS、DATAI、DATAO和SYSCLK相连。 S3C44B0X的IIS接口可与UDAl341TS的BCK、WS、DATAI、DATAO和SYSCLK相连。 对于UDAl341TS的L3总线,它是该芯片工作于微控制器输入模式时使用的,它包括L3DATA、L3MODE和L3CLOCK共3根接线,它们分别表示为微处理器接口数据线、微处理器接口模式线和微处理器接口时钟线。 通过这个接口,微处理器能够对UDAl341TS中的数字音频处理参数和系统控制参数进行配置。 但是S3C44B0X中没有设该专用接口,可通过通用I/O口进行扩展。
2. 编程 IISInit( )是初始化IIS接口函数, Playwave( )是播放wav文件函数。 分别介绍如下:
(1) 初始化IIS接口 void IISInit(void) { rPCONE=(rPCONE&0xffff)+(<<16); //设置I/O口PE8输出CODECLK信号 Init341(); //初始化UDA1341芯片 }
(2) UDA1341TS初始化 void Init1341() { //配置与L3接口相连的I/O口 rPCONA=0x1ff; //设置PA9为输出,PA9连接L3D rPCONB=0x7CF; //设置连接L3M的PB5和连接L3C的PB4端口 rPDATB=L3M | L3C; //设置起始L3M和L3C输出高电平 //通过L3总线初始化1341芯片
_WrL3Addr(0x14+2); //写状态地址000101x=10 _WrL3Data(0x60,0); //0,1,10,000,0复位,256fs,无 直流滤波器,IIS _WrL3Addr(ox14+2); //写状态地址000101xx+10 _WrL3Data(0x20,0); //0,0,10,000,0无复位,256fs, 无直流滤波器,IIS _WrL3Addr(0x14+2); //写状态地址000101xx+10 _WrL3Data(0x81,0); //1,0,0,0,0,0,11OGS=0,IGS=0,ADC_NI //DAC_NI,sngl speed,AonDon _WrL3Addr(0x14+0); //写DATA0地址000101xx+10 _WrL3Data(0x0A,0); }
其中_WrL3Addr(U8 data)是通过L3总线接口写控制数据地址(data)到1341芯片; _WrL3Data(U8 data,int halt)是通过L3总线接口写控制数据(data和停止操作)到1341芯片。