5. 中级—高级外设
目录:
1. FMC 扩展 SDRAM
2. LCD(使用扩展的 SDRAM 当 LCD 显存)
3. SD 卡
4. USB
5. Camara
6. CAN 总线
1. FMC 扩展 SDRAM
1.1 stm32f429 的存储空间
(1)芯片内部 norflash(2MB)
norflash 掉电不会丢失数据,而且访问速度很高,所以单片机的 norflash 既用于永久存储程序,
也用于运行程序,只不过 norlfash 速度会比 SRAM 等内存要低一些,不过速度也很高了。
这一点和 PC 机不一样,pc 机的程序保存在硬盘上,但是硬盘是不能运行程序的,必须从硬盘将
程序导入内存中才能运行,但是内存掉电后就会丢失数据。
(2)芯片内部 SRAM(256KB)
SRAM 为我们常说的内存,掉电会丢失数据,用于存放程序在运行时所需的数据,以便程序在运
行时快速访问需要的数据。
疑问:程序能不能运行在 SRAM 内存上?
当然可以,只要把程序放到 SRAM 上,然后从 SRAM 去指令,即可上运行程序,此时程序以
及程序所需的数据都在 SRAM 上,不过由于 SRAM 掉电会丢失数据,使用 SRAM 来运行程序时,
需要先将程序永久的放在 norflash、SD 等永久存储器上,运行时再导入 SRAM 内存中运行。
不过由于 norflash 的访问速度也很快,所以单片机程序基本都是运行在 norflash 上的,而 SRAM
只用于存放程序所需的数据。
1.2 STM32 等单片机属于典型的哈佛结构
哈佛结构的特点是,程序和数据是分开的,程序在 norflash 中,而数据则在 SRAM 中,而 PC 属于
典型的冯诺伊曼结构,数据和程序是放在一起来运行的。
1.2 STM32F429 的内部 Norflash 和 SRAM 不够用怎么办?
此时我们需要对 Norflash 和 SRAM 进行扩容。
1.2.1 扩展 Norflash
当要运行的程序非常大时,内部 Norflash 很有可能会不够用,此时就需要在外部外接一个 Norflash
芯片进行扩容,内外 norflash 加载一起,程序就有了足够的存储和运行空间。
1.2.2 扩展 SRAM
(1)扩展目的 1:存储程序运行时所需大量数据
当时程序运行时所需数据,以及所产生的数据非常大时,SRAM 很有可能会不够用。
比如后面讲 LCD 时,LCD 要显示的图片、视频的数据量会非常大,要求存储这些图像数据的
显存必须足大,但是内部 SRAM 往往不够用,因此我们就需要扩展 SRAM,以便给 LCD 提供足够
的显存。
(2)扩展目的 2:运行大型的程序
前面说过,对于单片机来说,如果运行程序的空间不够的话,一般会扩展 norflash,而不会扩
展 SRAM 来运行程序,扩展 SRAM 的目的一般都是为了存储程序运行时所需的大量数据。
但是理论上,你也可以扩展 SRAM 来运行程序。
(3)大家需要注意一点,并不是所有的存储器都能运行程序和所需的数据
1)比如 Nandflash、磁盘、eeprom:只能存储,但是不能运行程序和数据
常见的固态硬盘、SD 卡、PC 卡、前面介绍的 SPI—flash 都属于 Nandflash 存储器。
2)比如 SRAM、SDRAM、norflash:这些就可以运行程序和数据
(a) SRAM、SDRAM:就是我们常说的内存,掉电会丢失数据,不能永久存储数据,但是可以
用于运行程序和数据。
不过前面说过,单片机的 SRAM 和 SDRAM 都是用来存放(运行)程序所需的数据的,
而不是用来运行程序的。其实外设的寄存器组和 SRAM 的材质是一样的。
内存的运行速度往往会高于 norflash 运行速度。
(b)norflash:掉电不会丢失数据,既能永久存储数据,而且还能运行程序
所以在单片机中,norflash 既用于永久存储程序,也用于运行程序,之所以 pc 不使用
norflash,主要是因为 norflash 的访问速度相比 SRAM 等内存来说慢了很多,PC 对于速度要求
是很高的,所以不合适。
1.2.3 内部 norflash 和 SRAM 不够用时,为什么不使用 SPI—flash 和 i2c—eeprom 扩容
两个根本原因:
(1)SPI—flash(Nandflsh)和 i2c—eeprom,只能用于存储,无法运行程序和数据,因此不能用来扩
展 norflash 和 SRAM。
(2)扩展 norflash 和 SRAM 运行程序和数据时,访问扩展的 norflash 和 SRAM 时,必须也和访问内部
norflash 和 SRAM 一样,直接使用地址来来访问,比如:
*((uint32_t *)0xc3443323) = 1000; //写
int a = *((uint32_t *)0xc3443323); //读
但是 SPI 和 I2C 的接口做不到这一点,回忆一下前面讲的 SPI—flash、i2c—eeprom,我们必须
通过发送各种的命令后,才能访问 flash 和 eeprom,很麻烦,而且还是串行通信的,而访问 nor
和 SRAM 的速度都是非常高的,串行通信根本跟不上。
1.2.4 疑问:SPI—flash 和 i2c—eeprom 是用来干什么用的
用来永久存储文件、音频、视频、图片等数据,类似于 PC 机的硬盘。
除 SPI—flash 和 i2c—eeprom 外,板载 nandflash 芯片、SD 卡、u 盘、EMMC、UFS 等,都可以用
来永久存储文件、音频、视频、图片等数据。
除了 eeprom 外,SPI—flash、板载 nandflash 芯片、SD 卡、u 盘、pc 卡、EMMC、UFS 都是属于
nandflash 的存储器,不同的只是通信接口、可移动性等。
(1)SPI—flash:使用 SPI 接口,固定做在板子上
(2)板载 nandflash 芯片:使用特有的 nand 接口,ST 的单片机一般都使用 FMC 接口来代替 nand 接
口,同样也是固定做在板子上的。
(3)SD 卡:SD 卡接口,可以插拔移动。
(4)u 盘:USB 接口,可以插拔移动
u 盘和 SD 是非常类似的东西,但是各自使用场合不太一样。
1)u 盘:常用在电脑设备上,因为电脑基本都是 USB 接口的,只有很少的电脑才会提供 SD 卡
接口
2)SD 卡:用在手机、数码相机等等手持嵌入式设别中,我们的单片机产品也属于嵌入式设备。
(5)pc 卡:使用 pc 卡接口
(6)EMMC、UFS
·EMMC 接口,固定做在板子上
·UFS 接口,固定做在板子上
不过单片机一般不提供 EMMC、UFS 接口,都是给手机使用的,所以只有手机芯片才会提
供 EMMC 和 UFS 存储器的接口。
疑问:开发时如何选择存放“文件、音频、视频、图片等数据”的永久存储器?
答:通过数据量、单片机所提供的接口、成本、可移动性来进行综合选择。
(a)如果数据量少,对成本要求很高:那就选择 i2c 接口的 eerpom,单片机都会提供 i2c 接口
(b)如果数据量大:就选择 nandflash 类的存储器
·如果单片机只提供了某一种接口,比如只有 SPI 接口,那就没得选了,只能选 SPI—FLASH
,如果你不满意 SPI—FLASH,那就只能换其它单片机芯片了。
·如果单片机提供了很多种接口,比如 SPI 接口、nand 接口、USB 接口、SD 接口,此时
就根据需求来选。
- 如果需要可插拔
此时就选择 U 盘和 SD 卡、pc 卡,具体选哪一种就根据你所需速度、体积、成本、客
户使用需求等来综合决定,U 盘和 SD 卡的访问速度差不多,但是 SD 卡的体积却比 U 盘
小。
- 不需要插拔,而是需要固定做在板子上
SPI—FLASH、板载 nandflash 芯片都可以,同样的,具体采用哪一种,需要根据通信
速度、成本、体积等因素来综合决定。
在前面的课程中,我们已经讲了 SPI—FLASH 和 i2c—eeprom,在后续的课程会讲板载 nandflash
芯片、SD 卡、u 盘(这个不一定),由于单片机不提供 EMMC 和 UFS 接口,所以我们不会讲 EMMC
和 UFS。
1.3 STM32F429 如何实现 NORFLASH 和 SRAM 的扩展(扩容)
STM32F429 提供了 FMC 外设,FMC 外设的作用就是用来外接外部大容量、高速通信(并行通信)
的存储器的。
1.3.1 STM32F429 FMC 可外接哪些存储器
(1)外接 norfash,外接了外部 nor 后,其实就是扩展了内部的 norflash
(2)外接 SRAM、PSRAM、SDRAM 等内存,此时就是扩展内部的 SRAM
(3)外接 Nandflash 芯片、PC 卡,由于 STM32 内部没有 Nand 和 pc,不存在扩容一说
接 Nandflash 时,就是使用 FMC 来模拟 Nandflash 的接口。
1.3.2 FMC 与 FSMC 的区别
FMC 功能 > FSMC。
FMC 能够接 SDRAM,但是 FSMC 不能接 SDRAM,比 F429 低级的片子,带的都是 FSMC,所以这
些片子不能接 SDRAM。
疑问:SRAM 和 SDRAM 有什么区别呢?
答:后面再介绍。
1.3.2 FMC 的工作原理
STM32 FMC 外设的原理就是,它会直接将 STM32 芯片内部并行的地址总线和数据总线延伸出来,
这些总线原本挂的只有内部的寄存器、norflash、SRAM 等,当 FMC 外接了外部存储器后,现在也挂
了外部的 norflash、SRAM、nandflash 等存储器。
访问内的寄存器、norflash、SRAM 的空间时,都是直接使用地址来访问的,比如:
*((uint32_t *)0xc3443323) = 1000; //往 0xc3443323 所指向的空间写数据
int a = *((uint32_t *)0xc3443323); //从 0xc3443323 所指向的空间读数据
现在既然也挂了外部的 norflash、SRAM、nand,那么也可以直接使用地址来访问外部 norflash、
SRAM、nand 等存储器的空间,使用地址来直接访问,这种的方式更加方便快捷。
1.3.2 FMC 扩展(扩容)SRAM
FMC 可以外接 SRAM/PSRAM/SDRAM 三种内存来扩展内部的 SRAM,PSRAM 不常见,SRAM 又比
SDRAM 贵,因此常见的是外接 SDRAM 来扩展内部 SRAM。
疑问:SRAM/PSRAM/SDRAM 的区别是什么呢?
PSRAM 被称为伪 SRAM,工作原理与 SRAM 相似,因此我们这类主要介绍 SRAM 与 SDRAM 的区别。
(1)SRAM:静态随机存储器
SRAM 中每个 byte 的每个 bit 是由触发器来组成的,触发器的特点是,只要上电就能一直稳定
保持 1/0 高低电平,不需要动态地充电刷新以保持数据,因为这种一上电就可以稳定保持数据的
特性,所以 SRAM 就被称为了“静态随机存储器”,正是由于静态的这个特性,所以 SRAM 的性
能是非常好的,所以内部需要告诉访问的寄存器和内存都是 SRAM 材质的。
不过 SRAM 的造价也很高,因此只有缓存、各种寄存器、芯片内部内存等小容量的,而且对
访问速度要求很高存储才会使用 SRAM 来实现,大容量的使用 SRAM 很不划算。
疑问:随机是什么意思?
答:随机就是你可以单独的访问任何一个字节,不像 nandflash、磁盘这种,访问时只能按块
(页)来访问,当你想访问某个字节时并不能直接访问这个字节,必须先访问出一块的内容,
然后再从这一块中提取出你要的那个字节,这就非常的麻烦。
(2)SDRAM:动态随机存储器
SDRAM 中每个 byte 的每个 bit 是使用类似电容这样的东西来组成,电容处于充电状态时为高电平
1,没有电量时就是低电平的 0,由于电容很容易丢失电量,如果不补充电量的话,比如原本表示 1
的高电平,最后变为了表示 0 的低电平,这就会导致数据丢失。
为了防止 SDRAM 丢失数据,就需要不断的给 SDRAM 的 bit 补充电量,这个不断补充电量的过程
就是定时动态刷新的过程,所以 SDRAM 需要被动态刷新以稳定的保持数据,因此 SDRAM 才被称为了
“动态随机存储器”。
目前的 SDRAM,每个 bit 的刷新时间不能超过 64ms,否者就会导致数据丢失,所以必须保证在
64ms 内动态刷新完每个 bit,当然刷新频率也不要太高了,否者会影响 SDRAM 的访问速度,因为在
刷新时是不能访问 SDRAM 的。
正是由于 SDRAM 需要被不断刷新,因此 SDRAM 的访问速度会比 SRAM 低,这也是 SDRAM 的造
价比 SRAM 低的一个重要原因,正是由于 SDRAM 的造价低,大容量的内存都会选择使用 SDRAM,不
过对于寄存器、缓存(cache)、芯片内部集成的内存,对于访问的速度要求较高,因此都是选择使
用 SRAM。
SDRAM 又分为了好多种,PC 的内存条使用的为 DDR SDRAM(简称 DDR),而 STM32 扩展的 SDRAM
只是普通的 SDRAM,DDR SDRAM 翻译为中文就是“双倍速率的 SDRAM”或者“双通道 SDRAM”,
访问速度会远高于的我们单片机所用的普通 SDRAM。
1.3.4 STM32 通过 FMC 扩展内存,与 PC 机通过内存条扩展内存的区别
扩展的本质都是一样的,但是在细节上还是有区别。
(1)区别 1:
1)PC 内存条:插口式的,预留的是通用插口,买回内存条回来后谁都可以扩展,很人性化。
2)STM32 FMC:做电路板时,扩展电路被做死了,只有产品设计者才能设计,一般人扩展不了
(2)区别 2
1)PC 内存条:PC 所需要的容量都很大,一个 SDRAM 满足不了要求,因此内存条上都会拼
接很多的 SDRAM 芯片,一个 SDRAM 芯片常被称为一个颗粒。
2)STM32 FMC:单片机设备所需的内存比较小,一般只扩展一个 SDRAM 芯片(颗粒)就够了。
(3)区别 3
1)PC 内存条:PC 机对于访问速度要求很高,因此扩展的都是高速的 DDR SDRAM。
2)STM32 FMC:单片机对于速度的要求低了很多,因此一般扩展的都是普通的 SDRAM。
单片机 CPU 的工作频率一般也就几十 M 到几百 M,相比 PC 的动辄就几个 G 的频率来说,实
在是太低了,因此就算给单片机扩展了一个 DDR,单片机也无法充分的发挥出 DDR 的价值。
1.4 SDRAM 工作原理
评论0
最新资源