如上图,BF531需外接一个4MB的FLASH,同时还需另外的4组片选信号。而BF531的4个外部异步空间AMS0-AMS3刚好只有4MB。如果按下面的逻辑FLASH_A19 = AMS0 & AMS2FLASH_A20 = AMS0 & AMS1FLASH_WE = AWEFLASH_CE = AMS0 & AMS1 & AMS2 & AMS3就刚好可以访问FLASH的4MB空间。但是这时无法对另外的4组片选信号进行控制。请问,如何利用BF531的A17,A18,A19,#AOE,#AWE,#ARE进行操作呢?如果用AMS3和A17,A18,A19进行译码AMS3 A19 A18 A17 CS 对应BF531空间 0 1 1 1 CS0 0x203E0000 0 1 1 0 CS1 0x203C0000 0 1 0 1 CS2 0x203A0000 0 1 0 0 CS3 0x20380000但是,这样译码时,FLASH高位空间就会被占用,同时,在访问这些空间时,如何知道访问的是FLASH的空间,还是外部片选CS0,CS1,CS2,CS3呢?谢谢各位了。
bf531只有4MB空间,如果接4MBflash,所有地址空间都被占用,即使再译码接外设,其外设的地址空间也是位于flash空间内的,你可以找一个IO,连接flash OE管脚,访问外设时,将IO拉高,禁止flash工作,当IO拉低时,进制所有外设工作。
哦,那如果我只能用接入CPLD的这几根DSP引脚进行译码,实现对四组片选和FLASH尽可能多的访问有没可能,还是说要去掉AMS3当作其余外部片选控制(也就是说FLASH_CE = AMS0 & AMS1 & AMS2 直接少掉对FLASH 1MB的访问能力,以防止在访问四组片选时,分不清访问的是FLASH的空间还是片选)?
还有一个问题,我看到有人外扩FLASH 8MB时,将BF531的A1-A19接FLASH的A1-A19,A20和A21跟上面一样通过AMS0-AMS3译码,而将FLASH的A0空着。这是什么原理?这样访问的第一个地址是不是0x000003,第二个为0x000007.....即每次访问跳过4个空间,但这样要如果存储这4个空间呢?
应该将AMS3留出控制你的外设,以防止与flash地址冲突。
EBIU的空间大小决定了不可能将flash接到8MB,除非有其他控制线参与,如置高为选择前4MB,置低为后4MB,分块处理。
blackfin的数据线为16bit,所以在访问0地址时,会将地址1的数据读出,所以你说的那种8MB的接法,实际上是将2,3地址数据空除,实际有效空间仍为4MB。
对,是FLASH_CE。如果使用IO的话,需要注意默认情况下,IO选择的是FLASH,避免上电瞬间IO指向外设,导致flash读取代码错误。