----------原创不易,欢迎点赞收藏。广交嵌入式开发的朋友,讨论技术和产品-------------
NXP LS1043/1046预留了一个IFC接口,用于访问带地址线和数据线的并行总线芯片。从个人经验来看,它们都是继承了freescale PowerPC系列的local bus(LBC)。原文介绍如下:
The integrated flash controller (IFC) is used to interface with external asynchronous/
synchronous NAND flash, asynchronous NOR flash, SRAM, generic ASIC memory and
EPROM.
IFC汇集了四种时序发生器, NAND/NOR/GPCM/ASIC。用于控制NAND芯片,当仁不让的选择NAND模式。并行的NOR flash,选择NOR模式也毫无疑问。但是我们一些带地址线和数据线的特殊芯片,通常想到用GPCM模式。
由于CPU管脚资源有限,地址线没有这么多,那么让AD0~AD15总计16根线用于地址和数据复用。AD复用信号会被外部锁存器锁存,ADDR地址线是不要锁存的。这里又涉及到大小端的问题,有些芯片是intel字节序(小端),有些芯片又采用Motorola字节序(大端)。如下图
LS1046地址/数据线复用信号IFC_AD[0:15], 地址线 IFC_A[16:27]。所以总计出了28根地址线,寻址范围可达 2^28 = 256MB。当然,大部分非NOR flash存储芯片,内部没有这么大地址空间,就用不到这么多地址线。有些甚至只需要8根地址线即可对整个芯片的寻址。
如果满配28根地址线都用于寻址,AD0为地址值最低位,A27为地址值最高位,这就是小端模式。
好在LS1046可以配置,在NOR时序机下面,ADM_SHFT_MODE决定了当前片选的大小端。
ADM_SHFT_MODE = 0时,IFC_AD0=地址的最高位,当前为大端模式
ADM_SHFT_MODE = 1时,IFC_AD0=地址的最低位,当前为小端模式
如下图,CS3片选访问一个CAN总线控制器。
LS1046的IFC_AD0对接 《------------------》CAN的AD0
LS1046的IFC_AD1对接 《------------------》CAN的AD1
以此类推
LS1046的IFC_AD7对接 《-------------------》CAN的AD7
LS1046的IFC_AD8 ~ FC_AD15未使用
LS1046的IFC_A16 ~ IFC_A27未使用
我们当初使用GPCM模式配置,用md.b 0x7fb05555 10命令去访问,这是读10个字节。
地址线IFC_AD0上始终没有信号的改变,按理来说应该是高低电平间隔出现。然而逻辑分析仪始终为低电平0。
调整了ADM_SHFT到最大值20,
逻辑分析仪上IFC_AD0出现了电平变化
然后访问的数据还是不对,仔细阅读手册,发现NOR机制或许可行,改MSEL= 00
因为IFC_AD0对接CAN的AD0,地址线是不需要左移的,ADM_SHFT=0,No shift
同时AD0对应的是最低位,那么需要配置ADM_SHFT_MODE = 1, AD总线携带地址最低位
其他基地址等寄存器配置,本文略过,至此CAN芯片可以正常访问。 有个疑问就是GPCM有个ADM MODE说明,但是没有看到寄存器描述,不然配置成GPCM应该也是可行的。