本帖最后由 redone 于 2022-4-12 15:26 编辑
最早CPU要访问外部RAM需要三条总线:地址总线、数据总线(以16条地址线8位存储器为例)和控制总线
地址总线:A0到A15共计16根地址线
数据总线:D0到D7共计8根数据线
控制总线:至少包括读写控制等控制线
CPU要访问外部RAM,就得靠这些线来进行控制,
首先在这16根地址线上呈现地址值,指示要访问的目标地址,使得外部RAM可以定位到存储单元;
接着,要让控制总线上呈现是读还是要写,好让外部RAM做好准备;
最后,如果是读,则外部RAM就把指定地址存储器的值8位呈现在D0到D7上,由CPU取走。
如果是写,则CPU自己把8位值输出呈现在D0到D7上,由外部RAM接收后改写存储器的值。
这整个过程都是由硬件来实现的,完全没有任何一句用户代码来参与的,是CPU设计之初就定义实现好的,这个过程的时间关系就叫做时序。一定要记住一点,总线是硬件实现的,有严格的规定好的时序。
可以看到,这种对引脚要求是比较多的,16条地址线加8条数据线再加控制线必须有25根线以上,
所以8051为了省线,将8条数据线和地址线的低8位进行了时分复用(称为AD0到AD7),这样就可以省掉8根线,但代价是必须由外部增加锁存器来锁存地址的低8位(现在的外部RAM可以理解为将锁存器做到了芯片中)。
但过程仍是上述描述的内容。即使这样,仍需要引脚近20根,如果存储量大,地址线更多,这些线就是FSMC,
FSMC即灵活的静态存储器控制器,就是用来驱动外部总线,做上面所描述的工作的。
为什么说是灵活的,我想主要是因为它可以通过事先对一些时间等参数进行设置调整,可以适应不同厂家参数有差异的SRAM或者像LCD、OLED等类似外设。
但这些参数设定一次之后,整个控制时序关系就固定了,总线在具体工作的时候就不再需要用户来操心了,这就是硬件实现的优点,速度快且不占用CPU的计算资源。
至于IO,我想就不用解释了,就是CPU的输入输出端口,可以由CPU控制读写的一个个外部引脚,既然可以控制,就有人仿造总线的时序,用多个IO来通过软件控制的方式来模拟外部总线,比如8051没有SPI接口,就可以用至少三个IO口来分别模拟SCLK时钟,MOSI和MISO数据线。
事实上,你也可以用二十几个IO来模拟上面所说的三条总线,但每一次的读写你都得按照时间顺序来控制这二十几个IO端口,你可以把它编好后写成函数,但仍然是占用CPU大量资源的,这就是软件实现的弊端,速度慢且占用CPU的计算资源。
灵活的总线访问接口即FSMC,无须你用IO来模拟,就如同8051的地址数据总线一样以硬件的方式来自动工作。
不仅如此,如果你的系统用不到FSMC接口,还可以把预备FSMC使用的端口让出来,使它可以当成普通IO一样来使用,从而节省宝贵的外部引脚空间
|