6122|18

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教关于EBOOT、SDRAM、FLASH [复制链接]

各位高手:
小弟问题如下:
   1、在EBOOT.BIB中定义了这样一段:
     MEMORY
;   Name     Start     Size      Type
;   -------  --------  --------  ----

    EBOOT    96C78000  00020000  RAMIMAGE       ; 128 KB for code
    RAM      96C68000  00008000  RAM

    DRV_GLB  9A8BB000  00001000  RESERVED
其中的96c78000应该分为96c00000+78000
      96c00000是SDRAM的虚拟基地址
如下:
SDRAM_BASE_PHYSICAL         EQU 0xA0000000
SDRAM_BASE_C_VIRTUAL        EQU 0x96C00000
SDRAM_BASE_U_VIRTUAL        EQU (SDRAM_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET)
请问78000是根据什么定义的??为什么 eboot的Start在这呢???
   
    2、我用的是nor flash ,在EBOOT中只有FlashErase和FlashWrite函数,那么初始化FLASH的地方在哪??
       是否只是在OEMAddressTable中初始化??
       新改的FLASH从J3C(32M)变为P33(64M)
       硬件改变影响软件的部分只有:原来J3C的地址线从MA1---MA24,现在的P33的地址是从MA1---MA25
      请问这个地址的改动是在EBOOT的哪里体现的??
   
    3、在CE的BSP中对FLASH的管理是利用了IPSM(INTEL的FLASH驱动)
       其中大部分是库文件,只有一个文件是可以修改的plat_api.c
      而这里修改的部分似乎只有如下:
       UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr)
{
    static const PSM_OEMInfo oem_info = {
        /* PhysicalReadStartAddress      */   (VOID_PTR)0x00000000,
        /* PhysicalWriteStartAddress     */   (VOID_PTR)0x00000000,
        /* PhysicalBurstReadStartAddress */   (VOID_PTR)0x00000000,
        /* VirtualReadStartAddress       */   (VOID_PTR)0xA0000000,
        /* VirtualWriteStartAddress      */   (VOID_PTR)0xA0000000,
        /* VirtualBurstReadStartAddress  */   (VOID_PTR)0xA0000000,
        /* MaximumArrayLength            */   0x01F00000,   -------flash的大小
        /* MaximumRegistrySize           */   0x00080000,   -------注册表的大小?


        /* ManagedAreaStart               */   0x01A00000,   -------NK的大小

        /* ManagedAreaLength             */   0x00500000,   -------FLASH - NK = ManagedAreaLength
        /* ReadBusWidth                  */   32,
        /* WriteBusWidth                 */   32,

        /* BurstReadBusWidth             */   0
    };
    请问,我只修改MaximumArrayLength 、 ManagedAreaStart  、 ManagedAreaLength
      是不是就可以实现在CE启动后识别到FLASH为hard disk???

最新回复

quq
AMD与富士通的产品。 怎么联系你? 我的MSN:sankye@163.com  详情 回复 发表于 2009-3-13 16:00
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
各位高手:
小弟问题如下:
  1、在EBOOT.BIB中定义了这样一段:
    MEMORY
;  Name    Start    Size      Type
;  -------  --------  --------  ----

    EBOOT    96C78000  00020000  RAMIMAGE      ; 128 KB for code
    RAM      96C68000  00008000  RAM

    DRV_GLB  9A8BB000  00001000  RESERVED
其中的96c78000应该分为96c00000+78000
      96c00000是SDRAM的虚拟基地址
如下:
SDRAM_BASE_PHYSICAL        EQU 0xA0000000
SDRAM_BASE_C_VIRTUAL        EQU 0x96C00000
SDRAM_BASE_U_VIRTUAL        EQU (SDRAM_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET)
请问78000是根据什么定义的??为什么 eboot的Start在这呢???
————————————————————————————————————————————————
这个78000是偏移量啊。
刚才在MSN估计被那个手册误导了。怎么搞得,传过来的文字不像现在的好看,看来还是论坛好,现在重新更正
96C78000  明显是虚拟地址,你找到和他对应的物理内存即可,按照你的OEMAddresstable
96C78000  应该和物理内存地址(0xA0000000 +78000=)对应
现在很好理解了,刚才还以为是映射到了保留区域的内存,
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
EBOOT的起始放在这个地方只是memory layout的约定,你也换到其他地方,只要把对应代码改过来就行
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
感谢各位:
重点在问题2上:
以下是
OEMAddressTable
        ;-----------------------------------------------------------------------------------
        ; Virtual(cached)                     Phys Addr                           #MB
        ;-----------------------------------------------------------------------------------

        IF SDRAM_SIZE_128_MB = "1"
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                128                ; (96C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ELSE
        DCD SDRAM_BASE_C_VIRTUAL,                                SDRAM_BASE_PHYSICAL,                                64                ; (96C0 0000, A000 0000) everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
        ENDIF

        DCD IM_STORAGE_BASE_C_VIRTUAL,                        IM_STORAGE_BASE_PHYSICAL,                        1                ; (8400 0000, 5C00 0000) Internal Memory-Storage
        DCD IM_CONTROL_BASE_C_VIRTUAL,                        IM_CONTROL_BASE_PHYSICAL,                        1                ; (8410 0000, 5800 0000) Internal Memory-Control
        DCD USBH_BASE_C_VIRTUAL,                                USBH_BASE_PHYSICAL,                                        1                ; (8420 0000, 4C00 0000) USB Host
        DCD MEMC_BASE_C_VIRTUAL,                                MEMC_BASE_PHYSICAL,                                        1                ; (8430 0000, 4800 0000) Memory Controller
        DCD LCD_BASE_C_VIRTUAL,                                        LCD_BASE_PHYSICAL,                                        1                ; (8440 0000, 4400 0000) LCDC
        DCD PERIF_BASE_C_VIRTUAL,                                PERIF_BASE_PHYSICAL,                                32                ; (8450 0000, 4000 0000) Mem-Mapped Registers (perifs)
        DCD PCMCIA_S1_CMN_C_VIRTUAL,                        PCMCIA_S1_CMN_PHYSICAL,                                64                ; (8650 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
        DCD PCMCIA_S1_ATTR_C_VIRTUAL,                        PCMCIA_S1_ATTR_PHYSICAL,                        32                ; (8A50 0000, 3800 0000) PCMCIA S1 ATTRIBUTE MEM Space
        DCD PCMCIA_S1_IO_C_VIRTUAL,                                PCMCIA_S1_IO_PHYSICAL,                                32                ; (8C50 0000, 3000 0000) PCMCIA S1 I/O Space
        DCD PCMCIA_S0_CMN_C_VIRTUAL,                        PCMCIA_S0_CMN_PHYSICAL,                                64                ; (8E50 0000, 2C00 0000) PCMCIA S0 COMMON MEM Space
        DCD PCMCIA_S0_ATTR_C_VIRTUAL,                        PCMCIA_S0_ATTR_PHYSICAL,                        32                ; (9250 0000, 2800 0000) PCMCIA S0 ATTRIBUTE MEM Space
        DCD PCMCIA_S0_IO_C_VIRTUAL,                                PCMCIA_S0_IO_PHYSICAL,                                32                ; (9450 0000, 2000 0000) PCMCIA S0 I/O Space
        DCD ZBANK_BASE_C_VIRTUAL,                                ZBANK_BASE_PHYSICAL,                                1                ; (9650 0000, E000 0000) Zero-Bank (in RSVD slot)- No Phy Mem needed to back up
        DCD CMRA_BASE_C_VIRTUAL,                                CMRA_BASE_PHYSICAL,                                        1                ; (9660 0000, 5000 0000) Camera Peripheral Interface

        ; Mainstone-Specific Mappings
        ;
        DCD BOOT_FLASH_BASE_C_VIRTUAL,                        BOOT_FLASH_BASE_PHYSICAL,                        32                ; (8000 0000, 0000 0000) nCS0: BOOT ROM
        DCD CS2_L_BASE_C_VIRTUAL,                                CS2_L_BASE_PHYSICAL,                                8                ; (8200 0000, 0800 0000) nCS2
        DCD CS2_H_BASE_C_VIRTUAL,                                CS2_H_BASE_PHYSICAL,                                8                ; (8280 0000, 0A00 0000) nCS2
        DCD CS3_L_BASE_C_VIRTUAL,                                CS3_L_BASE_PHYSICAL,                                8                ; (8300 0000, 0C00 0000) nCS3
        DCD CS3_H_BASE_C_VIRTUAL,                                CS3_H_BASE_PHYSICAL,                                8                ; (8380 0000, 0E00 0000) nCS3
        DCD CS4_L_BASE_C_VIRTUAL,                                CS4_L_BASE_PHYSICAL,                                1                ; (9670 0000, 1000 0000) nCS4
        DCD CS4_H_BASE_C_VIRTUAL,                                CS4_H_BASE_PHYSICAL,                                1                ; (9680 0000, 1200 0000) nCS4
        DCD CS5_L_BASE_C_VIRTUAL,                                CS5_L_BASE_PHYSICAL,                                1                ; (9690 0000, 1400 0000) nCS5
        DCD CS5_H_BASE_C_VIRTUAL,                                CS5_H_BASE_PHYSICAL,                                1                ; (96A0 0000, 1600 0000) nCS5

        DCD 0x00000000,                                                        0x00000000,                         0                ; End of Table (#MB MUST BE ZERO!)

; ------------------------------------------------------------------

        END
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
2、我用的是nor flash ,在EBOOT中只有FlashErase和FlashWrite函数,那么初始化FLASH的地方在哪??
      是否只是在OEMAddressTable中初始化??
      新改的FLASH从J3C(32M)变为P33(64M)
      硬件改变影响软件的部分只有:原来J3C的地址线从MA1---MA24,现在的P33的地址是从MA1---MA25
      请问这个地址的改动是在EBOOT的哪里体现的??


NOR是线性寻址的,所以其实是不需要初始化的。只是CE下有block设备的统一接口,所以会在eboot中将其按照标准block设备配置一下,定义好对应的block size, page size, block num等等。换nor的话,这里会有改动的。

另外,虚拟地址空间映射肯定要改,要将原来的32M空间增加为64M空间,这样系统才知道可用的ROM区的实际大小。不改的话,系统还是只认低32M的。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
我看了楼主发来的PXA270数据手册,感觉功能好强悍啊,比三星的强悍多了,只是手册有点乱。组织不好
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
我看了楼主发来的PXA270数据手册,感觉功能好强悍啊,比三星的强悍多了,只是手册有点乱。组织不好
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

8
 
   
    2、我用的是nor flash ,在EBOOT中只有FlashErase和FlashWrite函数,那么初始化FLASH的地方在哪??
      是否只是在OEMAddressTable中初始化??
      新改的FLASH从J3C(32M)变为P33(64M)
      硬件改变影响软件的部分只有:原来J3C的地址线从MA1---MA24,现在的P33的地址是从MA1---MA25
      请问这个地址的改动是在EBOOT的哪里体现的??
仔细研究一下Flash的Datasheet,一般对Nor Flash的操作是以block为单位的,不同的Flash,或同一Flash内部的block的大小也可能不一样,象P30前面4个是32K的,后面都是128K的,这些都需要自己去注意,具体是写还是擦命令也是参考Datasheet中的命令列表,为什么没有读的命令记得以前已经讨论过了。说白了在Eboot下面没有文件系统,你就把Flash当做一个芯片,按其时序直接对其进行读写等操作就OK了。
地址的变化体现在Eboot中的操作地址范围的变化,这是针对你情况,别的接法还会体现在别的地方。

   
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
    3、在CE的BSP中对FLASH的管理是利用了IPSM(INTEL的FLASH驱动)
      其中大部分是库文件,只有一个文件是可以修改的plat_api.c
      而这里修改的部分似乎只有如下:
      UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr)
{
    static const PSM_OEMInfo oem_info = {
        /* PhysicalReadStartAddress      */  (VOID_PTR)0x00000000,
        /* PhysicalWriteStartAddress    */  (VOID_PTR)0x00000000,
        /* PhysicalBurstReadStartAddress */  (VOID_PTR)0x00000000,
        /* VirtualReadStartAddress      */  (VOID_PTR)0xA0000000,
        /* VirtualWriteStartAddress      */  (VOID_PTR)0xA0000000,
        /* VirtualBurstReadStartAddress  */  (VOID_PTR)0xA0000000,
        /* MaximumArrayLength            */  0x01F00000,  -------flash的大小
        /* MaximumRegistrySize          */  0x00080000,  -------注册表的大小?


        /* ManagedAreaStart              */  0x01A00000,  -------NK的大小

        /* ManagedAreaLength            */  0x00500000,  -------FLASH - NK = ManagedAreaLength
        /* ReadBusWidth                  */  32,
        /* WriteBusWidth                */  32,

        /* BurstReadBusWidth            */  0
    };
    请问,我只修改MaximumArrayLength 、 ManagedAreaStart  、 ManagedAreaLength
      是不是就可以实现在CE启动后识别到FLASH为hard disk???
LZ折腾PSM也够久了吧,问题还没有搞清楚?
1、        /* ManagedAreaStart              */  0x01A00000,  -------NK的大小
这个地址是指前面所有Reserve出来的空间大小,不仅仅是NK的大小,反正是你想用来做FlashDisk的起始地址,跟NK一点关系都没有
2、/* ManagedAreaLength            */  0x00500000,  -------FLASH - NK = ManagedAreaLength
参考1
3、你的Flash类型是PSM支持的类型,它会自动识别,只需要设定好该文件中的参数就可以
4、      /* MaximumRegistrySize          */  0x00080000,  -------注册表的大小?
这个是保留给HiveBaseRegistry的空间大小,不实现Hive,可以指定为0
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

10
 
感谢三位大侠
TO shuiyan :
   “NOR是线性寻址的,所以其实是不需要初始化的。只是CE下有block设备的统一接口,所以会在eboot中将其按照标准block设备配置一 下,定义好对应的block size, page size, block num等等。换nor的话,这里会有改动的。”
    现在的J3C是这样定义的,您说的应该是修改这里吧:
UINT16 FlashErase(DWORD dwPhysStart, DWORD dwPhysLen)
{
        // 32M Flash
        int FLASH_SIZE = 16777216 * 2;
        int ERASE_BLOCKS = 128;

        int BLOCK_SIZE = FLASH_SIZE / ERASE_BLOCKS;
        int L3_BLOCK_SIZE = 65536; //64Kb per block on L3 (blocks 0 - 3)
        DWORD i,j;
        DWORD num_blocks;
        DWORD num_blocks_to_erase;
        DWORD num_l3_blocks_to_erase = 0;
        DWORD num_l3_blocks_erased;
        DWORD flash_start_address = (FLASH_START | CACHED_TO_UNCACHED_OFFSET);
        volatile DWORD *pdwFlash;

“另外,虚拟地址空间映射肯定要改,要将原来的32M空间增加为64M空间,这样系统才知道可用的ROM区的实际大小。不改的话,系统还是只认低32M的。”
  现在J3C在OEMAddressTable中定义是这样的:
DCD BOOT_FLASH_BASE_C_VIRTUAL,        BOOT_FLASH_BASE_PHYSICAL, 32  ; (8000 0000, 0000 0000) nCS0: BOOT ROM

其中BOOT_FLASH_BASE_C_VIRTUAL   =   0x80000000   
    BOOT_FLASH_BASE_PHYSICAL    =   0x00000000
请问这个是根据什么定义的呢??

我看hzdysymbol 发给我的资料,他的是
DCD     0x9A900000, 0x00000000, 64      ; MAINSTONEII: nCS0: Boot Flash (64MB)


 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

11
 
TO hzdysymbol兄:
“象P30前面4个是32K的,后面都是128K的,这些都需要自己去注意,具体是写还是擦命令也是参考Datasheet中的命令列表,为什么没有读的命令记得以前已经讨论过了。说白了在Eboot下面没有文件系统,你就把Flash当做一个芯片,按其时序直接对其进行读写等操作就OK了。
地址的变化体现在Eboot中的操作地址范围的变化,这是针对你情况,别的接法还会体现在别的地方。

高手!果然P33也是这样的,以前都没注意到这点!
“地址的变化体现在Eboot中的操作地址范围的变化”
Eboot对FLASH的地址操作具体没有找到位置。唉 一片茫然!


“LZ折腾PSM也够久了吧,问题还没有搞清楚?
1、        /* ManagedAreaStart              */  0x01A00000,  -------NK的大小
这个地址是指前面所有Reserve出来的空间大小,不仅仅是NK的大小,反正是你想用来做FlashDisk的起始地址,跟NK一点关系都没有
2、/* ManagedAreaLength            */  0x00500000,  -------FLASH - NK = ManagedAreaLength
参考1
3、你的Flash类型是PSM支持的类型,它会自动识别,只需要设定好该文件中的参数就可以
4、      /* MaximumRegistrySize          */  0x00080000,  -------注册表的大小?
这个是保留给HiveBaseRegistry的空间大小,不实现Hive,可以指定为0 ”

前两天又有任务忙了些别的,PSM那个试了一半就中断了,不过看到这个我就放心了,可以先调试EBOOT,EBOOT下解决了,我想这个应该可以解决的
非常感谢!

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
定义是在PlatformInit里面,对BootDevice进行初始化时配置的。Erase里面事实上用不到这些参数的。


其中BOOT_FLASH_BASE_C_VIRTUAL  =  0x80000000  
    BOOT_FLASH_BASE_PHYSICAL    =  0x00000000 ”
邪门,怎么会是这个地址?
0x80000000是CE下虚拟内存的起始地址。

//
// Mainstone: (on PDC): nCS0: Boot FLASH (32MB)
//
#define BOOT_FLASH_BASE_PHYSICAL            0x00000000
#define BOOT_FLASH_BASE_C_VIRTUAL           0x9CA00000
#define BOOT_FLASH_BASE_U_VIRTUAL           (BOOT_FLASH_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET)

 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 shuiyan 的回复:
定义是在PlatformInit里面,对BootDevice进行初始化时配置的。Erase里面事实上用不到这些参数的。


其中BOOT_FLASH_BASE_C_VIRTUAL  =  0x80000000  
    BOOT_FLASH_BASE_PHYSICAL    =  0x00000000 ”
邪门,怎么会是这个地址?
0x80000000是CE下虚拟内存的起始地址。

//
// Mainstone: (on PDC): nCS0: Boot FLASH (32MB)
//
#define BOOT_FLASH_BASE_PHYSICAL            0x00000000
#define BOOT_…


这个PXA270和2440的内存映射表虚拟地址起始不一样..............我原先也说过wince下内存映射表是可以按需改动起始,结束的虚拟地址的。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 
可能是因为这块板子支持128M和64M两种RAM配置,所以他把FLASH和RAM的映射地址换了一下。否则如果把RAM放在低地址,两种配置的所有他映射都要变,比较麻烦。
P33和J3不一样,有两种不同大小的BLOCK,又分为top和bottom两种配置,自己编程的话这些要注意。不过你用PSM,这些信息PSM自己可以从CFI接口查出来,不需要你关心。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 4 楼 shuiyan 的回复:
NOR是线性寻址的,所以其实是不需要初始化的。只是CE下有block设备的统一接口,所以会在eboot中将其按照标准block设备配置一下,定义好对应的block size, page size, block num等等。换nor的话,这里会有改动的。

另外,虚拟地址空间映射肯定要改,要将原来的32M空间增加为64M空间,这样系统才知道可用的ROM区的实际大小。不改的话,系统还是只认低32M的。


请问shuiyan大侠:
原来定义的(32M-J3C):
--------------------------------------32M-----------------------------------------------------
BOOT_FLASH_BASE_PHYSICAL        EQU                0x00000000
BOOT_FLASH_BASE_C_VIRTUAL        EQU                0x80000000
BOOT_FLASH_BASE_U_VIRTUAL        EQU                (BOOT_FLASH_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET)  
                                                 其中CACHED_TO_UNCACHED_OFFSET = 0x20000000

OEMAddressTable中:
    DCD BOOT_FLASH_BASE_C_VIRTUAL,  BOOT_FLASH_BASE_PHYSICAL,  32  ;(8000 0000, 0000 0000)  nCS0: BOOT ROM

-----------------------------------------------------------------------------------------------

现在定义的64Mnor flash (p33):
     新改的FLASH从J3C(32M)变为P33(64M)
      硬件改变影响软件的部分只有:原来J3C的地址线从MA1---MA24,现在的P33的地址是从MA1---MA25
那么我在OEMAddressTable中需要怎么修改才能“将原来的32M空间增加为64M空间,这样系统才知道可用的ROM区的实际大小”呢??
谢谢!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 
学习中。。。
楼主搞定了没?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

17
 
楼主:我的是由J3 32M变成S29GL128P  128M
应该怎么改呀?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

18
 
S29GL128P  128M
??
这个是三星的吧?
跟我联系一起讨论下
我这个已经改完了
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

19
 
AMD与富士通的产品。
怎么联系你?
我的MSN:sankye@163.com
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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