4211|18

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

对OEMAddressTable以及2440一些硬件连接的疑惑 [复制链接]

以前,一直是在开发板上修改程序,遇到的都是一些软件问题,现在新板子增加了外设,就开始迷茫了。
我看了立宇泰的OEMAddressTable,如下:
OEMAddressTable
    ;;;-------------------------------------------------------------
    ;;; Virt Addr   Phys Addr   MB
    ;;;-------------------------------------------------------------
    DCD 0x80000000, 0x02000000, 30  ; 30 MB SROM(SRAM/ROM) BANK 0
    DCD 0x82000000, 0x08000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 1
    DCD 0x84000000, 0x10000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 2
    DCD 0x86000000, 0x18000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 3
    DCD 0x88000000, 0x20000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 4
    DCD 0x8A000000, 0x28000000, 32  ; 32 MB SROM(SRAM/ROM) BANK 5
    DCD 0x8C000000, 0x30000000, 64  ; 64 MB DRAM BANK 0,1
    DCD 0x90800000, 0x48000000,  1  ; Memory control register
    DCD 0x90900000, 0x49000000,  1  ; USB Host register
    DCD 0x90A00000, 0x4A000000,  1  ; Interrupt Control register
    DCD 0x90B00000, 0x4B000000,  1  ; DMA control register
    DCD 0x90C00000, 0x4C000000,  1  ; Clock & Power register
    DCD 0x90D00000, 0x4D000000,  1  ; LCD control register
    DCD 0x90E00000, 0x4E000000,  1  ; NAND flash control register
    DCD 0x91000000, 0x50000000,  1  ; UART control register
    DCD 0x91100000, 0x51000000,  1  ; PWM timer register
    DCD 0x91200000, 0x52000000,  1  ; USB device register
    DCD 0x91300000, 0x53000000,  1  ; Watchdog Timer register
    DCD 0x91400000, 0x54000000,  1  ; IIC control register
    DCD 0x91500000, 0x55000000,  1  ; IIS control register
    DCD 0x91600000, 0x56000000,  1  ; I/O Port register
    DCD 0x91700000, 0x57000000,  1  ; RTC control register
    DCD 0x91800000, 0x58000000,  1  ; A/D convert register
    DCD 0x91900000, 0x59000000,  1  ; SPI register
    DCD 0x91A00000, 0x5A000000,  1  ; SD Interface register
    DCD 0x92000000, 0x00000000,  2  ;  2 MB SROM(SRAM/ROM) BANK 0----前面已经有了BANK 0,为什么这里还会有?这样做有什么好处?
    DCD 0x00000000, 0x00000000,  0  ; End of Table (MB MUST BE ZERO!)

    END
;-----------------------------------------------------------------
还有,我看2440和nand flash的硬件连线,让我纳闷的是没有nGCSX(X=0~7),现在我搞不清楚nand flash地址是如何确定的,挂靠在哪个BANK
最后一个问题,如果我外设接了一块芯片,用nGCS4片选,那么这块芯片的物理地址是什么?该怎么样读写该芯片?

麻烦各位了,帮帮菜鸟,感激不尽。

最新回复

谁来帮帮我啊  详情 回复 发表于 2008-10-9 09:48
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
DCD 0x92000000, 0x00000000,  2  ;  2 MB SROM(SRAM/ROM) BANK 0
这里的 Bank 0 值 启动模式设置为从 Nor Flash 启动时, 系统的起始物理地址就是 0; 系统启动后 在操作系统中 访问 NorFlash 的虚拟地址为 0x92000000。 看 S3C2440 数据手册的 存储器 那章就明白了。
nGS4 对应的虚拟地址和物理地址分别为  DCD 0x88000000, 0x20000000
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 xajhuang 的回复:
DCD 0x92000000, 0x00000000,  2  ;  2 MB SROM(SRAM/ROM) BANK 0
这里的 Bank 0 值 启动模式设置为从 Nor Flash 启动时, 系统的起始物理地址就是 0; 系统启动后 在操作系统中 访问 NorFlash 的虚拟地址为 0x92000000。 看 S3C2440 数据手册的 存储器 那章就明白了。
nGS4 对应的虚拟地址和物理地址分别为  DCD 0x88000000, 0x20000000


----------谢谢你,我刚才不确定,后来我想想,已经不明白了。终归我还是信心不足,总是不敢尝试自己的想法
----------对了我看2440和nand flash的硬件连线是有专门的引脚的nFCE ,不是nGCSX(X=0~7),我是should内存被nGCSX选定的影响,触类旁通错误了。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
晕倒,老师打错字
后来我想想,已经不明白了-----------是已经明白了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
nand flash 不在地址空间里,只是类似硬盘的外设
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 wscnczp 的回复:
nand flash 不在地址空间里,只是类似硬盘的外设


----------这句话虽然平平无奇,但是一语点醒梦中人啊。nand flash 和一个扩展串口芯片没有什么区别,只是它是存储器而已。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
来来来 ,搞明白了给分
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

8
 
我在BANK4挂载了个8位的外设(8位并口数据转换成串口输出的芯片SC16C652B),那么我在启动代码(ADS写的BIOS里面)MEMCFG.inc文件里面是否要把BANK4的总线宽度改为8位的吗?如下B4_BWSCON        EQU (DW32)改为如下B4_BWSCON        EQU (DW8)

不过我后来改了也和没有改一样,从2440发送0x55给SC16C652B,接收到的居然是0xD5。

前辈们支招啊。


有什么好的调试方法,指点一下。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
扩展串口芯片SC16C652B读写数据的怪问题
现在我在ADS下调试扩展串口,发送奇怪现象,0~0x80就会在串口显示相应数字+0x80,大于0x80就完全正常显示
---------------不知道怎么回事

我觉得我的硬件连接应该没有错,否则是不能接收发送数据的,现在我把代码发上来,让大家帮忙分析一下,
//=============================SC16C652B.h=============================

#ifndef _SC16C652B_H
#define _SC16C652B_H

//--寄存器
//

#define RHR_THR_DLL    (*(volatile unsigned char *)0x20000000)//RHR_OR_THR Baud rate register set (DLL
#define IER_DLM                   (*(volatile unsigned char *)0x20000001)//
#define FCR_ISR                   (*(volatile unsigned char *)0x20000002)//

//--LCR决定了一些寄存器的访问权限,避免了寄存器地址冲突
#define LCR                    (*(volatile unsigned char *)0x20000003)//

#define MCR                    (*(volatile unsigned char *)0x20000004)//
#define LSR                    (*(volatile unsigned char *)0x20000005)//
#define MSR                    (*(volatile unsigned char *)0x20000006)//
#define SPR                    (*(volatile unsigned char *)0x20000007)//



//--函数声明
extern unsigned char WriteData(unsigned char wData);

extern unsigned char ReadData(void);

extern unsigned char InitChip(void);

#endif
//=============================SC16C652B.c=============================
//------------------------------扩展串口-------------------------------

#include "SC16C652B.h"

static unsigned char BaudRateInit(unsigned char lBL,unsigned char lBH);
static unsigned char AccessGR(void);
static unsigned char AccessSR(void);
unsigned char InitChip(void);


unsigned char WriteData(unsigned char wData);
unsigned char ReadData(void);
void DelayMS(unsigned char ms);

unsigned char InitChip(void)
{
        if(BaudRateInit(0x0c,0x00))
                FCR_ISR=0x51;
        if(AccessGR())
                return 1;
}
static unsigned char BaudRateInit(unsigned char lBL,unsigned char lBH)
{
        if(AccessSR())
                {
                        RHR_THR_DLL=lBL;
                        IER_DLM=lBH;
                        return 1;
                }
        else
                return 0;
}


static unsigned char AccessGR(void)
{
        LCR=0x02;
        return 1;
}

static unsigned char AccessSR(void)
{
        LCR=0x82;
        return 1;
}


void DelayMS(unsigned char ms)
{       
    unsigned int i,j;
        for(i=1000;i>0;i--)
                for(j=ms;j>0;j--);
}
unsigned char ReadData(void)
{       
        unsigned char rData;
       
        rData=RHR_THR_DLL;//--读取扩展串口八位数据(通过串口调试助手发送数据给扩展串口芯片)
        WriteData(rData);//--把读取到扩展串口八位数据再发送给串口调试助手
       
        return 1;
}

unsigned char WriteData(unsigned char wData)
{       
        RHR_THR_DLL=wData;
        return 1;
}       

//==============================
InitChip();
while(1)
{
               
ReadData();
}

//------是不是前面的地址定义有问题。
#define LCR (*(volatile unsigned char *)0x20000003)//---------这些我是参考启动代码的,难道这些不能得到八位unsigned char我发现串口的写法比骄傲奇怪,明明是unsigned char类型就可以了,但是void Uart_SendByte(int data)

                       
       
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

10
 
刚才我用JLink调试,发现如果从串口调试发送0x08过来,时候查看ReadData函数,接收到的也是0x08 ,那么接收数据是完全正常的,这说明这个地址定义没有错啊,为什么发送出去小于0x80就会出现出现一些有规律的的怪现象呢?
unsigned char ReadData(void)
{
unsigned char rData;

rData=RHR_THR_DLL;//--(通过串口调试助手发送数据0x08给扩展串口芯片),接收到的也是0x08
WriteData(rData);//--把读取到扩展串口八位数据再发送给串口调试助手
return 1;
}
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 7 楼 gooogleman 的回复:
我在BANK4挂载了个8位的外设(8位并口数据转换成串口输出的芯片SC16C652B),那么我在启动代码(ADS写的BIOS里面)MEMCFG.inc文件里面是否要把BANK4的总线宽度改为8位的吗?如下B4_BWSCON EQU (DW32)改为如下B4_BWSCON EQU (DW8)

不过我后来改了也和没有改一样,从2440发送0x55给SC16C652B,接收到的居然是0xD5。

前辈们支招啊。


有什么好的调试方法,指点一下。

硬件上检查一下数据线最高位是不是一直为高;
软件上检查一下传输数据的类型。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢songtitan 提示

我现在把我所测到的数据写出来。
我首先用万用表去测八位数据的最高位,发现是3.4V,不过其余的其位数据引脚也是3.4V,后来想用万用表测量估计不行,就拿来示波器测量,发现八位数据的最高位引脚和其余七位的引脚的波形有些差别,不过很不明显,我都把扫描时间调为10ns了才看出细微差别,发现最高位数据引脚比较稳定,像小学老师批改作业打的钩,其余七位引脚就像闪电,蜿蜒崎岖。不过我还是不敢确定是否是最高位引脚被短路了,造成一直为高。

在这里我想问一下,为什么我一直发送0x00到2440了,为什么其相应每个引脚的平均电压还是3.4V的?

还有,我从memory窗口的0x20000000地址(RHR_THR_DLL的地址)写数据,结果和串口调试助手发送数据过来单步调试的结果一样,这是不是说明这肯定是电路硬件问题?直接向0x20000000地址写数据是直接通过仿真器操作硬件的吧?我认为向0x20000000地址写数据和我自己写的程序是无关的,结果和单步调试一样是否说明我的硬件有问题——数据的最高位(第八位)和一个高电平短接了,造成永远为高呢?
----前辈们,帮帮忙啊。

这些调试的过程我尽量写详细点,希望遇到同样问题的人得到帮助。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(中级)

13
 
引用 9 楼 gooogleman 的回复:
刚才我用JLink调试,发现如果从串口调试发送0x08过来,时候查看ReadData函数,接收到的也是0x08 ,那么接收数据是完全正常的,这说明这个地址定义没有错啊,为什么发送出去小于0x80就会出现出现一些有规律的的怪现象呢?
unsigned char ReadData(void)
{
unsigned char rData;

rData=RHR_THR_DLL;//--(通过串口调试助手发送数据0x08给扩展串口芯片),接收到的也是0x08
WriteData(rData);//--把读取到扩展串口八位数…


----------------这个现象再次证明是硬件问题,
先放着吧,不是俺画的电路图,先做别的。让画电路的检测一下。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
unsigned char传输数据的类型应该不会有错的
自己顶,
希望高人指点。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 11 楼 gooogleman 的回复:
谢谢songtitan 提示

我现在把我所测到的数据写出来。
我首先用万用表去测八位数据的最高位,发现是3.4V,不过其余的其位数据引脚也是3.4V,后来想用万用表测量估计不行,就拿来示波器测量,发现八位数据的最高位引脚和其余七位的引脚的波形有些差别,不过很不明显,我都把扫描时间调为10ns了才看出细微差别,发现最高位数据引脚比较稳定,像小学老师批改作业打的钩,其余七位引脚就像闪电,蜿蜒崎岖。不过我还是不敢确定是…

1 万用表当然不行了,那个数字是平均电流;
2 对0x20000000操作和代码的效果应该是一致的
3 数据类型应该无错,硬件连接的可能性比较大了。
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

16
 
谢谢songtitan。我准备先修改wince下面的512M nand flash驱动先,这个我过过几天再调试。到时候我会把结果以及原因分析贴上来
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

17
 
googleman,我目前正在做WinCE的移植,由于我的目标板上增加了一块图形显示芯片,而bsp中没有这部分,我怎样将图形显示芯片的驱动添加到目前的bsp(或者系统)中?
以前是搞硬件的,没有接触过系统,而且目前对WinCE系统调用很不明白,和以前的思路完全不一样。很是痛苦。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 graduated 的回复:
googleman,我目前正在做WinCE的移植,由于我的目标板上增加了一块图形显示芯片,而bsp中没有这部分,我怎样将图形显示芯片的驱动添加到目前的bsp(或者系统)中?
以前是搞硬件的,没有接触过系统,而且目前对WinCE系统调用很不明白,和以前的思路完全不一样。很是痛苦。


-------------------唉!你的就是学习驱动就可以了。比较复杂,你看看eeworld的一些人的博客就会了。我的我现在也想不明白为什么我的这个扩展接收到的数据会这样。唉。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

19
 
谁来帮帮我啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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