wangch_sh 发表于 2014-10-13 08:38

5509开发板FLASH程序的问题

我们公司有一块5509开发板,例程里有FLASH程序。
我看不懂,
比如片选:
#define CESECT1 0x200000
#define CESECT2 0x400000
#define CESECT3 0x600000
void Flash_CS()
{
        deminaddr = (int *)CESECT2;
        *deminaddr = 0x00fd;
    deminaddr = (int *)CESECT3;
        *deminaddr = 0x0040;
        deminaddr = (int *)CESECT2;
        *deminaddr = 0x00ff;
}

wangch_sh 发表于 2014-10-13 08:40







wangch_sh 发表于 2014-10-13 08:48

1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
      *deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
2.deminaddr = (int *)CESECT3;
      *deminaddr = 0x0040;
这一句好像是FLASH分配到CE3,那是怎么分配到CE3的呢?
请高手指教,谢谢!

wangch_sh 发表于 2014-10-13 08:50

wangch_sh 发表于 2014-10-13 08:51

U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.

wangch_sh 发表于 2014-10-13 17:52

没人知道吗?

zhangmangui 发表于 2014-10-13 21:57

wangch_sh 发表于 2014-10-13 08:48 static/image/common/back.gif
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
      *deminaddr = 0x00fd;


#define CESECT1 0x200000
#define CESECT2 0x400000
#define CESECT3 0x600000
这个宏定义就是每个映射区的基地址   也就是起始地址
从你的文档里可以看出   CE0用于外扩SDRAM   CE1-CE2接到了CPLD上
*deminaddr = 0x00fd;是用来时能FLASH    也就是CPLD检测到CE2拉低了
过来的数据就会送到了功能寄存器也就是文档中D1(AFLASH)位为1
这说明接下来要对FLASH操作了
deminaddr = (int *)CESECT3;
      *deminaddr = 0x0040;
由于CE3没有外扩SDRAM和FLASH也没有接CPLD
所以送数据0x0040时   数据总线没有像FLASH或SDRAM的占用
由于CPLD中通过寄存器使能了FLASH   所以这个数据CPLD直接读取配置Flash地址扩展寄存器
也就是FCE,FA18-FA13都为0   FRST为高    也就是对应数据0x40
也就是片选了flash

zhangmangui 发表于 2014-10-13 21:58

wangch_sh 发表于 2014-10-13 08:51 static/image/common/back.gif
U4是SRAM,CE0接到片选;U5是FLASH,没接CE3.

CE3应该都没接    就是用于关键时候送数据的    也就只有CPLD通过里面的
译码程序读取了

wangch_sh 发表于 2014-10-14 12:33


1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
      *deminaddr = 0x00fd;
这一句是选中CE2,AFLASH为0使能。
那为什么是CE2而不是CE1呢?
谢谢!
这样行不行呢?
deminaddr = (int *)CESECT1;
      *deminaddr = 0x00fd;
请多指教。

NWPU_CHEN 发表于 2014-10-14 15:16

wangch_sh 发表于 2014-10-14 12:33 static/image/common/back.gif
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
      *deminaddr = 0x00fd;


你映射的管理扩展寄存器组的访问地址估计是在CE2、CE3存储空间,所以才通过这两个存储空间对功能寄存器进行访问的吧

zhangmangui 发表于 2014-10-14 23:54

wangch_sh 发表于 2014-10-14 12:33 static/image/common/back.gif
1.手册上说,CE1和CE2接至CPLD使用。
deminaddr = (int *)CESECT2;
      *deminaddr = 0x00fd;


这就与CPLD里面的代码有关啊   你可以贴出CPLD里面的译码
就明白了
页: [1]
查看完整版本: 5509开发板FLASH程序的问题