最近需要用到TI的AM3352芯片的GPMC总线与FPGA通讯,写一部分基地址的学习心得,其他的还在学习。
主要参考:https://blog.csdn.net/zouchengshuai/article/details/52737395 感谢大佬的写作。
偶然发现:
nand FLASH是不需要地址线的,之前没有用过。
概述:
GPMC是TI的总线,TI将地址0x0000 0000~0x1FFF_FFFFF共512M地址留给了GPMC。需要通过GPMC_CONFIG1-7这7个寄存器来配置,其中GPMC_CONFIG7用来配置片选,也就是基地址,GPMC共有八个可配置的片选,其中0-1留给了FLASH,所以我们和FPGA通讯选用片选2-7。
基地址配置:
比如我现在要选用CS3即片选3,即配置GPMC_CONFIG7_3这个寄存器,如图所示:
该寄存器的0-5位,用来配置基地址, 分别对应了地址线A24-A29。
TI要求,每个地址的最小内存不能少于16M,且必须是16M的倍数,比如我们想配置CS3对应的地址为16M,即0-0xFFFFFF这段内存,因为内存基地址最小为A24,A24对应的地址为二进制1 0000 0000 0000 0000 0000 0000即十六进制的0x01000000,所以,我们0-5配置为0x01,那么CS3对应的基地址为0x01000000~0x1FFFFFF,我们要去访问这段内存,比如我们访问0x0100 0032这个地址,首先地址必须在GPMC地址范围内(0x0000 0000~0x1FFF_FFFFF),然后同掩码地址进行与运算(0x0F00 0000(掩码地址)),0x0100 0032&0x0F00 0000 = 0x0100 0000 同基地址一致,就会使能片选信号,也就是你访问0x0100 0000-0x01FF FFFF之间的地址,系统就会自动为你使能片选3.
#疑问:
这里有个疑问,掩码地址不应该是0x1F00 0000吗 ,即A24-A28,但是参考的文章里边写的是0x0F00 0000,这里哪位大佬明白了可以和我说下。
这个是官方的图,可以参考一下。
比如我现在挂了16M的CS3,CS4想继续挂16M的内存,挂到CS3后边 即0x01FF FFFF的后边,0x0200 0000-0x02FF FFFF,就把GPMC_CONFIG7_4的0-5配置为0x02即可。
第一次接触AM3352和GPMC,对基地址设置的一个初步了解,写下来一是梳理下逻辑二是给正在学习的大家一点思路,如果哪里不对欢迎大佬指正。
另外感谢前辈的文章让我们少走弯路。