位置:51电子网 » 技术资料 » 计算机技术

UClinux2.4.x+S3C4510B平台的驱动设计方案

发布时间:2007/8/15 0:00:00 访问次数:417

引言
今天,USB设备已经进入我们工作、生活的方方面面,它给我们带来了许多便利。因此,带有USB功能已经成为现在许多系统的一个基本要求。三星公司针对ARM7开发的S3C4510B是目前业界使用非常频繁的一款芯片。它的强大功能使其成为基于诸多传统的51等系列单片机开发思想的终结者。通过对它移植uClinux操作系统,犹如为虎添翼。稳定的Linux系统和强大的S3C4510B硬件紧密结合,形成了一个强大的开发平台,带来了崭新的开发理念。本文采用的是深圳英蓓特公司开发的EMBEST S3C4510B开发板,介绍在这样一个强大的平台上扩展基于CYPRESS公司开发的SL811HS(HOST)的USB-HOST;展示基于这个平台的区别于传统系统开发的崭新思想,同时进一步丰富该系统的功能。
1 扩展板硬件电路设计
英蓓特公司基于uClinux2.4.x+S3C4510B的开发板实现时,把程序放在由ROMCON0控制基地址的ROM/ARAM/FLASH组0;系统起动时,将放在该组的程序拷贝到SDRAM0组。本文将SL811HS的地址配到ROM/ARAM/Flash组1,由ROMCON1控制它的基地址,使用外部中断0接收SL811HS的中断信号。由于SL811HS没有将数据和地址总线分开,D0~D7将分时复用。这是由SL811HS的A0线控制;A0为低时,D0~D7上传输的是地址信息;A0为高时,D0~D7上传输的是数据信息。由此,用S3C4510B的ADDR10来控制A0,从而将SL811HS的数据和内部地址分离。USB-HOST扩展板原理简图如图1所示。
2 内核修改
要把SL811HS配置到ROMCON1控制的Bank1,主要应用对以下两个文件作改动。
①…armnommusnds100.h
将Line216的
#define DSR1 (0<<2)
改为:
#define DSR1 (1<<2)
这将把Bank1定义为8位的字节方式。
将Line 249的
#define rROMCON1 0x0
改为:
#define ROM_BASE1_R ((0x00200000>>16)<<10)
#define ROM_NEXT1_R (0x00300000>>16)<<20)
#definerROMCON1_R(ROM_NEXT1_R|ROM_BASE1_R|tACC0|tPA0|PMC0)
#define rROMCON0_B
(ROM_NEXT1_B|ROM_BASE1_tACC0|tPA0|PMC0)
这里ROM_x_R是指在系统复位后的值,也是系统在启动时的值。而ROM_x_B指的是系统在启动后,要将程序拷贝到SDRAM中运行,所以原来的FLASH-BANK0就不能再使用0地址,而应该由SDRAM0使用0地址。这个ROM_x_B就是当程序在SDRAM中运行时相应Flash组的新地址。
②….s
将line 162的
ldr r1,=0x200000
改为ldr r1,=0x300000
这是告诉系统,要将多大空间的内容从Flash存储中拷贝到SDRAM中去。
将line 259的
.word rROMCON1
改为.word rROMCON1_R
将line 272的
.word rROMCON1
改为 .word rROMCON1_B
这样就对rROMCON1在reset和boot两种不同模式下的配置值用不同的寄存器保存了。但是程序在运行的时候并不由这个值决定,而由rROMCON1决定的,所以程序必须在适当的时候将这两种模式下的其中一个值赋给rROMCON1,以供系统使用。
3 硬件电路检测
经过以上两步,就将SL811HS配置到由rROMCON1控制的ROM/ARAM/Flash组1了,其数据端口地址为0x1200400,地址端口地址为0x1200000。中断为外部中断0。可以采用下面的小程序来测试能否对SL811HS的内部寄存器进行正确的读写操作。
/***filename:test811.c****/
int main(void){
unsigned char *addr,*data,I,j,x,val;
int k,m;
addr=0x1200000;
data=0x1200400;
for(i=0x10;i<0x100;i++)
{mywriteb(i,addr);
mywriteb(i,data);}
printf("test now!");
for(i=0x10;i<0x100;i++)
{mywriteb(i,addr);
val=myreadb(data);
if(val!=i)
printf("error in test address %d",i);}
}
char myreadb(int addr)
{ unsigned char *addr1;
unsigned char data;
addr1=addr;
data=*addr1;
return(data);}
void mywrited(unsigned char data,int addr)
{ unsigned char*addr1;
addr1=addr;
*addr=data;}
把该程序作为一个应用程序,与内核一起整体编译。具体方法可以参考文件/documentation/adding-user-apps-howto.txt;
内核编译通过后,下载到开发板,然后启动系统,上位机利用超级终端监测。系统启动后,运行该应用程序。如果没有错误,则表明硬件连接正确了。
4 驱动移植
USB-HOST(SL811HS)的驱动程序不需要单独编写,Linux内核中有现成的代码可以借鉴,也可以到CYPRESS网站去下载。但是这个驱动程序是针对sal100设计的,所以必须作相应改动才能在我们的S3C4510B系统上使用。
这里的改动主要是对文件hc_s1811.c的修改。该文件位于…/driver/usb/
首先要修改硬件地址,因为SL811HS的数据和地址端口地址分别为0x1200400和0x1200000。修改line 106、107的
static int base_addr=0xd3800000;
static int data_reg_addr=0xd3810000;
为 static int base_addr=0x1200000;
static int data_reg_addr=0x1200400;
修改lin

引言
今天,USB设备已经进入我们工作、生活的方方面面,它给我们带来了许多便利。因此,带有USB功能已经成为现在许多系统的一个基本要求。三星公司针对ARM7开发的S3C4510B是目前业界使用非常频繁的一款芯片。它的强大功能使其成为基于诸多传统的51等系列单片机开发思想的终结者。通过对它移植uClinux操作系统,犹如为虎添翼。稳定的Linux系统和强大的S3C4510B硬件紧密结合,形成了一个强大的开发平台,带来了崭新的开发理念。本文采用的是深圳英蓓特公司开发的EMBEST S3C4510B开发板,介绍在这样一个强大的平台上扩展基于CYPRESS公司开发的SL811HS(HOST)的USB-HOST;展示基于这个平台的区别于传统系统开发的崭新思想,同时进一步丰富该系统的功能。
1 扩展板硬件电路设计
英蓓特公司基于uClinux2.4.x+S3C4510B的开发板实现时,把程序放在由ROMCON0控制基地址的ROM/ARAM/FLASH组0;系统起动时,将放在该组的程序拷贝到SDRAM0组。本文将SL811HS的地址配到ROM/ARAM/Flash组1,由ROMCON1控制它的基地址,使用外部中断0接收SL811HS的中断信号。由于SL811HS没有将数据和地址总线分开,D0~D7将分时复用。这是由SL811HS的A0线控制;A0为低时,D0~D7上传输的是地址信息;A0为高时,D0~D7上传输的是数据信息。由此,用S3C4510B的ADDR10来控制A0,从而将SL811HS的数据和内部地址分离。USB-HOST扩展板原理简图如图1所示。
2 内核修改
要把SL811HS配置到ROMCON1控制的Bank1,主要应用对以下两个文件作改动。
①…armnommusnds100.h
将Line216的
#define DSR1 (0<<2)
改为:
#define DSR1 (1<<2)
这将把Bank1定义为8位的字节方式。
将Line 249的
#define rROMCON1 0x0
改为:
#define ROM_BASE1_R ((0x00200000>>16)<<10)
#define ROM_NEXT1_R (0x00300000>>16)<<20)
#definerROMCON1_R(ROM_NEXT1_R|ROM_BASE1_R|tACC0|tPA0|PMC0)
#define rROMCON0_B
(ROM_NEXT1_B|ROM_BASE1_tACC0|tPA0|PMC0)
这里ROM_x_R是指在系统复位后的值,也是系统在启动时的值。而ROM_x_B指的是系统在启动后,要将程序拷贝到SDRAM中运行,所以原来的FLASH-BANK0就不能再使用0地址,而应该由SDRAM0使用0地址。这个ROM_x_B就是当程序在SDRAM中运行时相应Flash组的新地址。
②….s
将line 162的
ldr r1,=0x200000
改为ldr r1,=0x300000
这是告诉系统,要将多大空间的内容从Flash存储中拷贝到SDRAM中去。
将line 259的
.word rROMCON1
改为.word rROMCON1_R
将line 272的
.word rROMCON1
改为 .word rROMCON1_B
这样就对rROMCON1在reset和boot两种不同模式下的配置值用不同的寄存器保存了。但是程序在运行的时候并不由这个值决定,而由rROMCON1决定的,所以程序必须在适当的时候将这两种模式下的其中一个值赋给rROMCON1,以供系统使用。
3 硬件电路检测
经过以上两步,就将SL811HS配置到由rROMCON1控制的ROM/ARAM/Flash组1了,其数据端口地址为0x1200400,地址端口地址为0x1200000。中断为外部中断0。可以采用下面的小程序来测试能否对SL811HS的内部寄存器进行正确的读写操作。
/***filename:test811.c****/
int main(void){
unsigned char *addr,*data,I,j,x,val;
int k,m;
addr=0x1200000;
data=0x1200400;
for(i=0x10;i<0x100;i++)
{mywriteb(i,addr);
mywriteb(i,data);}
printf("test now!");
for(i=0x10;i<0x100;i++)
{mywriteb(i,addr);
val=myreadb(data);
if(val!=i)
printf("error in test address %d",i);}
}
char myreadb(int addr)
{ unsigned char *addr1;
unsigned char data;
addr1=addr;
data=*addr1;
return(data);}
void mywrited(unsigned char data,int addr)
{ unsigned char*addr1;
addr1=addr;
*addr=data;}
把该程序作为一个应用程序,与内核一起整体编译。具体方法可以参考文件/documentation/adding-user-apps-howto.txt;
内核编译通过后,下载到开发板,然后启动系统,上位机利用超级终端监测。系统启动后,运行该应用程序。如果没有错误,则表明硬件连接正确了。
4 驱动移植
USB-HOST(SL811HS)的驱动程序不需要单独编写,Linux内核中有现成的代码可以借鉴,也可以到CYPRESS网站去下载。但是这个驱动程序是针对sal100设计的,所以必须作相应改动才能在我们的S3C4510B系统上使用。
这里的改动主要是对文件hc_s1811.c的修改。该文件位于…/driver/usb/
首先要修改硬件地址,因为SL811HS的数据和地址端口地址分别为0x1200400和0x1200000。修改line 106、107的
static int base_addr=0xd3800000;
static int data_reg_addr=0xd3810000;
为 static int base_addr=0x1200000;
static int data_reg_addr=0x1200400;
修改lin

相关IC型号

热门点击

 

推荐技术资料

电源变压器制作
    铁心截面积S=34mm×60mm, &nbs... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!