打印
[其他ST产品]

关于Flash的问题,请教高人!

[复制链接]
3137|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tony007|  楼主 | 2007-8-13 10:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是str710f的单片机,FLASH用的是SST39VF6401,现在遇到一个奇怪的问题,就是我
向第8扇区写数据时第1640扇区也有同样的数据,
向第9扇区写数据时第1641扇区也有同样的数据,
向第10扇区写数据时第1642扇区也有同样的数据
如此类推,在扇区号前加N或减N都有一样,N为整数。
为什么同样的数据一次能写两份呢?检查程序没问题,地址线也不存在问题,但就是不知道原因所在。

 
 
沙发
浪淘沙| | 2007-8-13 10:25 | 只看该作者

有电路图吗?是不是你的电路有问题?

另外,请介绍一下这个SST39VF6401,它是一个什么样的Flash?串行的还是并行的?容量多大?

使用特权

评论回复
板凳
tony007|  楼主 | 2007-8-13 13:30 | 只看该作者

电路图传上来看不清楚啊

该Flash是4M*16位并行的,共2048个扇区,每个扇区为2048word,
1word=16bit

使用特权

评论回复
地板
浪淘沙| | 2007-8-13 13:50 | 只看该作者

没有电路图,也应该说说地址数据线是如何连接的

尤其是片选线。

STR710用的是什么扩展模式?

使用特权

评论回复
5
浪淘沙| | 2007-8-13 15:19 | 只看该作者

对不起,你能放一个PDF或图形文件吗?我没有PCB软件

或者只需用语言描述一下地址数据线是如何连接的,尤其是片选线,STR710用的是什么扩展模式?

使用特权

评论回复
6
progrime| | 2007-8-13 15:23 | 只看该作者

怎么还学人家把数据线扭成那样,累死你哦

建议你:
1.把硬件的数据口扭过来,用H-JTAG来写,
2.调整一下频率和等待时间来写

使用特权

评论回复
7
progrime| | 2007-8-13 15:27 | 只看该作者

你这问题不是数据线的问题就是写的时间过快

使用特权

评论回复
8
tony007|  楼主 | 2007-8-13 15:49 | 只看该作者

数据线问题?

如果是数据线问题那应该写的数据不正确才对,也不会存在写到两个不同的扇区啊,而且每一扇区数据都是正确的,就是写了两份。Flash的A0-A21地址线对应str710f的A.1-A.22,数据线D15-D0对应str710的D.0-D.15,是反着的,没办法电路图不是我设计的,我只写软件。CE#对应/CS0片选,读信号OE#对应/RD,ARM的/WE.0,/WE.1通过一个与门后连到flash的WE#

使用特权

评论回复
9
tony007|  楼主 | 2007-8-13 16:00 | 只看该作者

写外部flash的频率多少合适?

我的MCLK=RCLK=FCLK=48MHZ,PCLK=6MHZ,没有设置等待时间!不知道有没问题?数据口如果改过来要重新做一次样板,现在没时间了。

使用特权

评论回复
10
tony007|  楼主 | 2007-8-13 16:09 | 只看该作者

在写Flash时应该注意什么?

请问当电路连接都正确的情况下,在编写Flash程序应该注意什么?(STR710F单片机)

使用特权

评论回复
11
progrime| | 2007-8-14 09:52 | 只看该作者

你用什么工具写FLASH哦?

使用特权

评论回复
12
JIANG_WX| | 2007-8-14 09:58 | 只看该作者

Re:

1. 硬件连接:
   Flash的A0-A21地址线应该对应str710f的A.1-A.22,其它的连接不变(事实上
   U21没必要使用,只需STR710的/WE.0与flash的WE#连接就可以了,因为该
   flash是16bit的)。这样,FLASH-U20的地址映象为:0x60000000~
   0x607FFFFF;FLASH-U22的地址映象为:0x62000000~0x627FFFFF;
2. 编写Flash程序的注意事项:
(1)你存在FLASH中的数据的地址必须在上述范围内;
(2)选择合适的“Cycle Length”(寄存器EMI_BCON0/EMI_BCON1中的位域),详 
     细参考STR710的datasheet和FLASH的参数;
 (3) B_SIZE[1:0](寄存器EMI_BCON0/EMI_BCON1中的位域)应为0x01b,因为FLASH
     的总线是16 bit的。

使用特权

评论回复
13
tony007|  楼主 | 2007-8-14 11:28 | 只看该作者

程序代码是放在STR710F内部FLASH中的

我的程序代码是放在STR710F内部Flash中的,外部Flash(SST)只存放数据,我是通过程序写外部Flash的,不用其它式具写的。

使用特权

评论回复
14
浪淘沙| | 2007-8-14 12:13 | 只看该作者

你最好用仪器看一下

根据你的描述,怀疑你的软件有问题:

向第8扇区写数据时第1640扇区也有同样的数据,
向第9扇区写数据时第1641扇区也有同样的数据,
向第10扇区写数据时第1642扇区也有同样的数据

分析一下:
如果使用CS0,那么第8扇区的地址是0x60004000~0x600047FF;而第1640扇区的地址是0x60334000~0x603347FF。可以看到地址线的低16位相同,误操作区域的地址线的A16~A19共四条地址线为高,是不是你的软件中输出了这样的地址?否则就是你的硬件上有干扰!

你最好用仪器看一下这几条地址线的情况,判断是软件的错误还是硬件错误。

使用特权

评论回复
15
progrime| | 2007-8-14 13:56 | 只看该作者

BCON调大点试一下,可能是这问题

使用特权

评论回复
16
progrime| | 2007-8-14 14:11 | 只看该作者

在 EMI_INIT 里加上最那几条,从0x3C开始测试

   EMI_INIT
        LDR     r0, =GPIO2_Base_addr      
        LDR     r2, [r0, #PC0_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC0_off_addr]
        LDR     r2, [r0, #PC1_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC1_off_addr]
        LDR     r2, [r0, #PC2_off_addr]
        ORR     r2, r2,#0x000000FF
        STR     r2, [r0, #PC2_off_addr]
        LDR     r0, =EMI_Base_addr
        LDR     r1, =0x3C:OR:EMI_ENABLE:OR:EMI_SIZE_16  ///0x3C 0x38 0x34 ...(-4)... 0x04
        STR     r1, [r0, #BCON0_off_addr] ;             
        LDR     r1, =0x3C:OR:EMI_ENABLE:OR:EMI_SIZE_16  ///0x3C 0x38 0x34 ...(-4)... 0x04
        STR     r1, [r0, #BCON1_off_addr]               
        LDR     r1, =0x3C:OR:EMI_ENABLE:OR:EMI_SIZE_16  ///0x3C 0x38 0x34 ...(-4)... 0x04
        STR     r1, [r0, #BCON2_off_addr] ;             
        LDR     r1, =0x3C:OR:EMI_ENABLE:OR:EMI_SIZE_16  ///0x3C 0x38 0x34 ...(-4)... 0x04
        STR     r1, [r0, #BCON3_off_addr] 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

27

帖子

0

粉丝