基于Linux和EMBEST S3C4510B开发板实现扩展板硬件电路设计

发布者:星光闪耀最新更新时间:2023-01-04 来源: elecfans关键字:Linux  EMBEST  S3C4510  扩展板 手机看文章 扫描二维码
随时随地手机看文章

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》16)》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;

修改line 130、131的

#define SL811HC_IOPORT0 0xa000000

为 #define SL811HC_IOPORT0 0x1200000

#define SL811HC_IODATAPORT0 0x120040

由于将SL811HS的中断分配为中断0,所以应该修改line 108的

static int irq=34;

为 static int irq=0;

修改line 139的

#define Sl811HC_IRQ0 27

为 #define SL811HC_IRQ0 0

并且需要重新编写函数void init_irq(void)

为void init_irq(void)

{

INT_ENABLE(irq);

IntPend=0x1FFFFF;

IntMode=INT_MODE_IRQ;

}


然后再开始内核编译。在内核配置的时候,选上SL811HS项,将编译成功的内核烧到板子上,然后启动。用上位机的超级终端监测,可以看见系统已经为SL811HS分配了地址和中断等资源。至此USB-HOST的扩展就完成了。


结语

USB设备的广泛应用使许多系统都将考虑到对它的扩展,以满足广大客户的需求。本文介绍了在英蓓特公司的EMBEST3SC4510B开发板上扩展SL811HS(host)的详细步骤,并给出一个自编的测试程序,为硬件的检测提供了一个简单而有力的工具,为进一步开发移植USB设备驱动程序提供了硬件平台。


关键字:Linux  EMBEST  S3C4510  扩展板 引用地址:基于Linux和EMBEST S3C4510B开发板实现扩展板硬件电路设计

上一篇:基于S3C44B0X微处理器实现运动系统电流信号采集电路的设计
下一篇:基于S3C2410A微控制器的嵌入式数字示波器的应用设计方案

推荐阅读最新更新时间:2024-11-13 12:04

OK6410A 开发板 (八) 28 linux-5.11 OK6410A 进程之间的区别
进程是什么 单核系统上同一时间内,只有一个进程(进程A)在跑,该进程占用了 1.cpu的所有寄存器资源 2.cp15协处理器的所有寄存器资源 其他的进程都在内存中,也就是说 进程 B /进程 C 等 其实就是内存中的一组数据 那么这组数据是什么 这组数据 应该是 TCB TCB 从上到下包括什么 1.pt_regs (18*4 B) // 用于 系统调用 2.栈 8KB - 18*4 - (sizeof(thread_info)) - (sizeof(task_struct)) // 用于内核线程执行 3.thread_info (sizeof(thread_info))=528B // 用于 调度 4.task_s
[单片机]
linux 上 对 MSP430G2 系列进行 debug
本文介绍如何在 linux 系统上对 MSP430 程序进行 debug。包括程序的编译、下载、运行、调试以及 vim 编辑器自动补全设置。 工具 在本方案中,需要用到的主要工具包括 TI 官方提供的 IDE——CCS,mspdebug,msp430-elf-gdb,vim/neovim。 注意,CCS 的 linux 版本不支持连接 MSP430G2 系列的开发板,否则就没那么多麻烦了。在本方案中,该 IDE 只作为编译工具使用。 TI 官方提供的 msp430-gcc 虽然可以编译程序,但是缺少部分头文件。下面将介绍配置 GCC 的相关内容,但不建议作为编译工具使用。 配置 安装工具 安装 CCS、mspdeb
[单片机]
韦东山嵌入式Linux_3期之USB摄像头监控_手机App增加录像功能(二)
一、模块划分 i) (主体模块)视频采集播放 ii) 显示模式切换 iii) 拍照 iv) 录像 v) fps显示 vi) 录像的浏览和删除 回到顶部(go to top) 二、各模块的实现 2.1(主体模块)视频采集播放 2.1.1 参考资料: 1)主体框架(解码、读帧)参考雷霄骅的:100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x) 主体框架的流程,可参考雷霄骅的上述博文,这里不再赘述 2)帧的显示,参考:Android 使用 FFmpeg (二)——视屏流播放简单实现 帧显示的流程,大致如下: 2.2 显示模式切换 实现思路:利用av_filter
[单片机]
韦东山嵌入式<font color='red'>Linux</font>_3期之USB摄像头监控_手机App增加录像功能(二)
[Linux 底层]U-boot ksz9031网络驱动调试
ksz9031的介绍可以回归一下datasheet的介绍,一款很优秀的千兆以太网; 【Datasheet】PHY KSZ9031千兆网络芯片解读 系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 -linux4sam_6.0 板子型号:at91sama5d3x-xplained MCU型号:sama5d36 关注微信公众号,回复“ksz9031驱动”,免费下载ksz9031的驱动源代码。 硬件参考图如下: 1、uboot官网开发板默认配置文件路径
[单片机]
[<font color='red'>Linux</font> 底层]U-boot ksz9031网络驱动调试
OK6410A 开发板 (八) 29 linux-5.11 OK6410A 主要内核线程解析
kthreadd这篇博客简述了 一下 系统内创建的 所有内核线程 // 进程 1 2 的 父进程为 0 // 其他所有内核线程(被 包括的) 父进程都是 kthreadd 进程ID 所属用户 状态 COMMAND进程名 进程创建文件 进程创建函数 // 1号用户进程 1 root 1412 S {linuxrc} init //init/main.c kernel_thread // 1号用户进程 // 2号内核进程 2 root 0 SW // init/main.c kernel_thread // 2号内核线程,负责 创建所有的内核线程 //
[单片机]
基于S3C2410的串行外围设备接口SPI及Linux下嵌入式驱动的实现
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口,它允许CPU与TTL移位寄存器、A/D或D/A转换器、实时时钟 (RTO)、存储器以及LCD和LED显示驱动器等外围接口器件以串行方式进行通讯。 SPI总线只需3~4根数据线和控制线即可扩展具有SPI接口的各种I/O器件,其硬件功能很强,实现软件相当简单。串行A/D转换器具有电路简单、工作可靠的特点,而ARM芯片被设计用于手持设备以及普通的嵌人式应用的集成系统,将上述两种实用的芯片和SPI总线技术相结合以实现数据采集十分有效。 1 AD7888的功能与使用 AD7888是美国模
[单片机]
基于S3C2410的串行外围设备接口SPI及<font color='red'>Linux</font>下嵌入式驱动的实现
Linux下搭建STM8开发环境
使用SDCC+STM8Flash+STLink搭建Linux开发STM8开发环境,对应的MCS51,LPC之类的也可以使用SDCC 1、安装SDCC $ sudo apt-get install sdcc 2、安装stm8flash git clone https://github.com/vdudouyt/stm8flash.git cd stm8flash make sudo make install 3、安装STlink驱动 安装之前的需要安装的环境 1.libusb-1.0 1.1:sudo apt-get install libusb-dev 1.2:sudo apt-get install libusb-1
[单片机]
gsm库(libgsm)在ARM-Linux下的移植
GSM是常见的VOIP的语音编解码库,在Linux下用libgsm来实现。在项目中需要用到libgsm库。因此试着直接编译GSM库来编译.官网已经停止服务了,因此在这个网址下了最新版来编译 解压后发现,这个Makefile是一个手写而非 Au toconf生成的Makefile,并且只有编译静态库,而没有常见的动态库的Makefile. 因此将其修改一下,使用其能在ARM编译并且成动态库。这也是一个典型的Makefile的修改练习,如果想编译成静态库,简单把 LIBEXT 改成 a即可 # Copyright 1992-1996 by Jutta Degener and Carsten Bormann, Technis
[单片机]
gsm库(libgsm)在ARM-<font color='red'>Linux</font>下的移植
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved