用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

Blob在S3C44B0上的移植

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-11 00:03:21
置,并设定SDRAM刷新速度,相关源码如下所示:

MEMORY_CONFIG:

.long 0x11101002 /*进行存储器的配置,SDRAM刷新速度配置等*/

… /*这里需要根据不同情况进行修改*/

.long 0x20

.globl memsetup /*定义全局标号,以便能被start.s调用*/

memsetup:

ldr r0,=MEMORY_CONFIG /*进行配置*/

ldmia r0,{r1-r13}

ldr r0,=0x01c80000

stmia r0,{r1-r13}

mov pc,lr /*程序返回*/

Trampoline.s不需要进行修改。

进入Main()后,串口传输速度在结构体blob_status中设定:

blob_status.downloadSpeed=baud_115200;

blob_status.terminalSpeed=baud_115200;

串口的初始化相关代码定义在函数s3c44b0_serial_init()中,该函数在serial-s3c44b0.c中。对于S3C44B0的串口,一般只需要初始化下面四个寄存器串口就可以正常工作。如果不能工作,可能是系统时钟设置不同,只需要按照下列公式计算出divisor:

divisor=(int)(MCLK/(baud×16)) -1

替换下面的divisor即可。其中MCLK为系统主频,baud为波特率。

/*serial-s3c44b0.c中中s3c44b0_serial_init()函数初始化串0部分*/

REG(UFCON0)=0x0;/*关闭FIFO*/

REG(ULCON0)=0x03;/*设置数据位8,无奇偶校验,1位停止位*/

REG(UCON0)=0x0;/*脉冲中断,中断请求或查询模式*/

REG(UBRDIV0)=divisor;/*设置波特率*/

至此,初级移植工作已经完成,运行./configure ith-board=mba-44b0-with-linux-prefix=/path/to/linux-src进行相关配置。在此还可以加一些开关选项进行配置,具体请参阅Blob自带文档。如果没有错误,就可以make进行编译了。如果编译正确,可在blob/src/blob下得到bin格式的Blob,将其烧写到Flash即可运行。关于Blob第一部分和第二部分的链接脚本,可以在start-ld-script和rest-ld-script.in中看到相关的链接地址,编译器是根据这些地址链接程序的。在blob/src/blob/Makefile中可以看到,两个阶段分别以blob-start和blob-rest来编译,最后通过dd命令将它们组成一个完事的Blob二进制文件。

(1)命令行的修改

在笔者使用的Blob版本中,BackSpace不能起作用,这对于调试非常的不方便。查阅源码,可以发现在src/blob/lib/command.c中,GetCommand函数中定义着人机交互部分。将else if(c==''这一行修改为else if(c==0x7f),即可支持Backspace功能。

(2)Blob的运行

如果在前面的工作中没有什么问题的话,将blob/src/blob/blob文件烧写进Flash后,上电就可以从串口看到欢迎信息。加载linux内核和文件系统的后,等待几秒,如果没有操作,将启动操作系统,否则出现提示符:javascript:window.open(this.src);" style="cursor:pointer;"/>

Blob>

表示进入Blob。在该模式下提供了许多命令,可以方便地进行硬件调试、系统升级和系统引导。

Blob常用的命令有:blob、boot、xdownload、flashreload、dump、reblob、status等。

不同的Flash操作有所不同。笔者发现通过Blob烧写Flash的软件有些问题,为了调试方便,决定编写自已的Flash驱动程序。

(3)Flash驱动程序的编写

Flash作为非易失性的存储器,在开发板上的作用是能保存数据且掉电不丢失。和EPROM最大的不同在于,对Flash编程不需要对特定的引脚加高电平,只是对特定地址写入一组特定的数据即可进行编程,这样就直接在开发板上通过软件进行擦写,不必使用特定的编程器。但是它的缺点也是很明显的:操作过于复杂,SST39VF160是SST公司的一款16M位的Flash,16位数据线宽度,共2MB容量,分为512个扇区,每个扇区有4KB,或32个块(block),每个块64KB。对Flash编程之前,必须对相应的扇区、块或者整个芯片进行擦除后,才能进行编程。

通过S3C44B0进行Flash的烧写需要注意几点:首先,S3C44B0外部地址总线是根据外部数据总线宽度连接的。例如,本开发板外部数据总线为16位宽度,这样S3C44B0的地址线A0就没有接入外部地址总线,而是从A1接起。

对Flash编程需要对Flash写入一个特定的时序。如果S3C44B0寻址0x5555,由于外部总线错了一位,这样在Flash看来发过来的地址信号是0xAAAA,也就不能正确地完成操作。注意到这一点,根据Blob自带的Flash驱动程序,就可以很方便地改写出适合自己Flash驱动程序。

结语

根据笔者经验介绍了Blob在S3C44B0上的移植,目前它已经能稳定地运行在开发板上;并且可以进行烧写Flash,查看内存,引导uClinux等操作,为项目的后续开发奠定了良好的基础。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

相关文章

PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:22,171.88000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号