打印

求教 急

[复制链接]
2002|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyzyzy407|  楼主 | 2011-11-19 10:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
小弟最近做了个680213A和三星256MB的flash的板子如图



但是具体68013A怎么去控制flash现在搞不明白,我在固件程序定义了 一个BYTE xdata *Flash_Cle = 0x5001 ,本人认为通过向Flash_Cle中写就可以向flash中写命令了 但试了不对 通过用示波器观察 向0x5001写数据cs选片信号都不为低? 请问这个A0~A15和D0~D7应该怎么使用啊? 先谢了 真的很急

相关帖子

沙发
liangziusb| | 2011-11-21 10:47 | 只看该作者
用GPIF控制呀。

使用特权

评论回复
板凳
dqyubsh| | 2011-11-21 12:25 | 只看该作者
用个SPI接口的FLASH多简单。

软件用XBYTE。

使用特权

评论回复
地板
zyzyzy407|  楼主 | 2011-11-21 15:07 | 只看该作者
???大侠说明白些 谢了 2# liangziusb

使用特权

评论回复
5
zyzyzy407|  楼主 | 2011-11-21 15:08 | 只看该作者
板子已经出来了 现在就是不知道怎么去控制?您的“软件用XBYTE”是什么意思呢? 3# dqyubsh

使用特权

评论回复
6
dqyubsh| | 2011-11-21 19:55 | 只看该作者
没去问问设计板子的大爷,这个问题咋解决?

BYTE xdata *Flash_Cle = 0x5001这样不行。你得写成BYTE volatile xdata *,这就是XBYTE。

使用特权

评论回复
7
zyzyzy407|  楼主 | 2011-11-22 08:01 | 只看该作者
哦 我先试试看看 要不成还得劳您大驾了 呵呵 6# dqyubsh

使用特权

评论回复
8
zyzyzy407|  楼主 | 2011-11-22 10:34 | 只看该作者
还是不成 我现在把板子上的A0 A1与flash的ALE 和CLE切断了 通过68013的PC0与CLE和PC1与ALE连了起来 WR RD CS并没改程序如下
#define FLASH_DATA *(volatile BYTE xdata   *)0x5000
void Flash_Command(BYTE cmd)
{


PC0 = 1;

PC1 = 0;

FLASH_DATA = cmd;

delay(10);

PC0 = 0;
}
//------------------------------------------
//flash发送地址
//------------------------------------------
void Flash_Address(BYTE add)
{


PC1 = 1;

PC0 = 0;

FLASH_DATA = add;

delay(10);

PC1 = 0;
}

BYTE Flash_ReadID(void)
{

BYTE MAKERID,DEVICEID,INTERCHIPINFOR,SIZEINFOR,PLANEINFOR;



Flash_Command(0x90);



Flash_Address(0x00);



MAKERID = FLASH_DATA ;

DEVICEID = FLASH_DATA ;

INTERCHIPINFOR = FLASH_DATA ;

SIZEINFOR = FLASH_DATA ;

PLANEINFOR = FLASH_DATA ;
///*

EP6FIFOBUF[0] =  0x55;

EP6FIFOBUF[1] =  DEVICEID;

EP6BCH = 0;  
        SYNCDELAY;  
        EP6BCL = 2;        // arm EP6IN
        SYNCDELAY;                    
        EP2BCL = 0x80;          // re(arm) EP2OUT
//*/

return DEVICEID;


}
但现在的问题是读回来的数据就是0x00 若把0x00 改成0x01读回来的就是0x01 不知问题出在哪了 本人觉得时序没有问题啊
7# zyzyzy407

使用特权

评论回复
9
dqyubsh| | 2011-11-22 11:25 | 只看该作者
#include "absacc.h"

#define ADDR_FLASH        0xXXXX

BYTE Get()
{
    ....
    return XBYTE[ADDR_FLASH];
}

void Put(BYTE byte)
{
    ....
    XBYTE[ADDR_FLASH] = byte;
}

至于ADDR_FLASH等于多少,要靠地址线译码得到。

如果这样还不成,你赶紧投降,换方案。带ALE的FLASH,显然最好跟带ALE的单片机连接,68013不是。只能拼凑时序,弄个乱七八糟。

并行接口不比串行接口,随便写个程序就能过。希望仔细读书,20年前的书,然后再碰这些并行器件。

使用特权

评论回复
10
zyzyzy407|  楼主 | 2011-12-10 16:34 | 只看该作者
还是不成 呵呵 9# dqyubsh

使用特权

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

本版积分规则

1

主题

208

帖子

0

粉丝