当 Bank接的是 8 位宽度存储器的时候:HADDR[25:0]对应FSMC_A[25:0]
当 Bank接的是 16 位宽度存储器的时候:HADDR[25:1]对应FSMC_A[24:0]
搞懂这个地址对应关系前,需要先明白FSMC的概念。
FSMC是灵活的静态存储控制器,顾名思义它是用于驱动存储类器件的一种接口并且带有时序的自动控制,所以叫存储控制器。接口支持包括SRAM、NOR FLASH、NAND FLASH、PSRAM等存储器。STM32的FSMC将这些设备进行了划分分别是NOR/PSRAM、NAND、PC卡,他们共用地址线和数据线,通过片选来做区分。
TFT-LCD之所以能够使用FSMC是因为它的接口跟SRAM很相似:
SRAM的接口一般包括:地址线、数据线(8080并口)、片选、写信号线、读信号线,如果支持字节控制还有UB/LB线。
TFT-LCD的接口一般包括:RS(命令数据控制线,用来区分发送的是命令还是数据),数据线(8080并口)、片选、读、写
对比两者的接口线可以发现,SRAM有地址线,而TFT-LCD没有地址线,其他线都相同。由于RS线的使用方式就类似于地址线所以就可以把RS信号线当作地址线来用,两者的区别是SRAM有多根地址线,而TFT-LCD只有这一根RS,所以当我们使用FSMC驱动TFT-LCD的时候其实我们只使用到了一根地址线。
这样的话,我们就把TFT-LCD当作成了一个SRAM来用了。
回到文首,一般SRAM、屏幕器件等为了访问速度快,它会使用8080并口的16根数据线进行传输数据,但是STM32的HADDR他是按照字节寻址的,所以最小访问单位是字节,TFT-LCD屏幕由于使用的是8080并口,所以它的数据访问是2字节大小,那么就引出HADDR地址与TFT-LCD地址映射关系。
回到文首,我们把HADDR和FSMC的地址对应关系抽象成访问数组的形式,方便理解:
我们把地址线的对应关系当成访问数组的索引:index
STM32的HADDR是按照字节寻址,所以把HADDR当作一个数组:u8 HADDR[100];
当FSMC所外接的器件是8位宽度存储器的时候,我们把外部器件也当成一个数组:u8 DEV[100];
这样的话STM32通过HADDR发起访问,HADDR[index]直接能够对应上DEV[index],也就解释了HADDR[25:0]对应FSMC_A[25:0]的地址线是一对一进行对应的。
当FSMC所外接的器件是16位宽度存储器的时候,例如TFT-LCD:
把外部器件当成一个数组就变成了:u16 DEV[50];
|