STM32中,DMA和IIC好像都是用来传输数据的,有啥区别吗?本人小白,有点搞不太懂?

郭胜伟


DMA和IIC是两种完全不同的东西。IIC是一种通讯方式、一种通讯协议,用于芯片之间或者用于板子之间等近距离的通讯。而DMA是一种控制器、单片机的片上资源,是直存储器访问的意思。IIC可以使用DMA进行数据传输。下面分别介绍。

1

IIC通讯协议介绍

IIC是芯片间常用的一种近距离通讯方式,常用的通讯速率有100Kbit/s,400Kbit/s等,具有SDA和SCL两根线。SCL是通讯时钟线,SDA是数据传输线,每个IIC设备都有一个唯一的设备地址,地址为1个字节,高七位为设备地址,低一位为读/写操作。其总线拓扑结构如下图所示。

IIC通讯比较典型的应用就是AT24C04,该存储芯片的通讯方式为IIC,只需要两根线即可实现数据的通信,在硬件电路的设计上一般要在通讯总线上加两个上拉电阻。如下图所示。

2

DMA直接存储器访问介绍

DMA是直接存储器访问,不经过CPU而直接从内存存取数据的数据交换方式。传统的数据交互方式,比如有两个存储器要进行数据交互的话,需要通过单片机从存储器1获取数据后再转送给存储器2,单片机必须要做倒手处理。而DMA就是不通过单片机,即可实现存储器1和存储器2的数据交互,而单片机只需要向DMA下达控制指令即可。DMA可以用在IIC,SPI,UART,AD等资源中。多个器件在进行数据交互时不再需要单片机的参与,而只需要DMA完成后通知单片机即可。

以上就是这个问题的回答,感谢留言、评论、转发。更多电子设计、硬件设计、单片机等内容请关注本头条号:玩转嵌入式。感谢大家。


玩转嵌入式


小C原来是x市某星级酒店的厨师,厨艺精湛,深为食客称道。

近年来,国家大力提倡发现休闲农业和乡村旅游,受这些宣传的耳濡目染,小c在冲动之下辞去了收入丰厚的厨师工作,携妻儿老小返回了老家,利用自家老宅办起了农家乐。

刚开始,不知道前景,任何投入都精打细算,并没有请人帮忙,只是小C小两夫妻撸起了袖子干了起来。

小C夫人负责洗菜洗碗,上菜收钱,招呼客人;小C则发挥特长,颠勺炒菜。

毕竟在星级酒店掌过几年勺,小C的厨艺迅速收获了广大游客的味蕾,再加上小C夫人长相甜美,待客有道,回头客慢慢多了起来。在附近十里八乡也慢慢有了名气,甚至不少城里的市民利用周末时间驱车光顾小C的农家乐。

小C夫妇也开始忙的不可开交。特别是小C这里,刚起好了锅热好了油,又要忙着转身到身后的菜架上取食材;刚颠了两小勺,旁边的汤锅也噗噗噗沸腾了起来;门外空等了半天的游客又不耐烦的敲起了桌子。

虽然如此,小C夫妇的荷包也鼓了起来,日子通并快乐着。不久以后的意外又让这个稍有起色的生活起了波澜,甚至差点让整个家庭又跌倒了谷底。

某日,小C忙中出错,炒菜时不小心碰到了起锅的热汤,滚烫的热烫泼在了大脚上。

住院期间,小C痛定思痛,找人设计了一套如下的自动食材传送系统:

这个系统主要有几部分组成,编址智能菜架、智能炒锅、控制面板,食材传送带。编址智能菜架被分割成若干个小格,每一个小格有单独的仓门控制,可以用于放置食材、调料等,其对外提供地址线,当智能菜单通过地址线检测到地址信号(如第1排第1格),则打开对应的仓门,将食材或者调料投放到下方的传送带,传送带将其传送到智能炒锅,并投入其中进行炒制。

控制面板是整个系统的控制中心,可以事先存入各道菜的制作方法,包括菜的配方、投料顺序,火候大小,各火候的控制时间等;

操作者只需要在控制面板上选择相应的菜名,并启动炒菜流程。

则控制面板从系统库中调取相应的制作方法,按照投料的顺序将不同配料在智能菜架上的地址信号通过地址线发送给智能菜架,将各种配料按时间顺序通过传送带投入炒锅;同时,根据火候的要求通过时间继电器控制火候的大小的时序。

有了这样的系统之后,小C的工作轻松了不少,只需要在控制面板上操作按键,监控机器运行新动态。可以专心全程跟踪炒菜过程,不需要时不时被打断去做其它事情。

尝到了甜头的小C又进一步把供应商送货的流程也做了一些改进;

他找人设计了另一个自动收货系统,与供应商之间制定了类似“我是西瓜”,“我是土豆”之类的通信协议。

供应商送货来了之后,只要说出相应的命令,则收货系统会自动定位到智能菜架的不同仓格,将配料或者领料放在对应的位置。

大概过程如下图:

有了两个系统之后,小C的农家乐更加蒸蒸日上。后来,他还组织村民成立了合作社,将系统推荐给他们使用,带领大家一起发家致富。

这个”星级酒店名厨师辞去高薪工作,返乡创业历经波折年赚千万“的致富经故事讲完了。那么问题也来了,题主能不能在故事中找以哪一个是CPU,哪一个是DMA,哪一个是IIC通信协议。


IT自动化交流


I2C是通讯协议,就是MCU对外用来通讯的。和USART,SPI,CAN这种一样,而dma是MCU内部的一个功能部件,叫直接存储器访问,用于外设和存储器或者存储器与存储器之间的数据传输。DMA的目的是在无需CPU控制的情况下快速移动数据。

举个例子🌰,我刚做的一个应用。CPU先控制ADC进行采样,然后将采样数据发送给上位机。那我CPU和上位机之间就是通过串口进行连接,DMA没有办法连接到外面。然后我由于采样频率特别高,然后我采集到的数据还得计算,这样的话,整个流程就是:采集数据—处理数据—传输数据,这样循环。前面说了,我这个频率特别高,那这样一个流程下来是需要时间的,频率就受限制了。那这时候我就使用DMA,在处理数据之后,数据保存在flash中,这时候传输数据就可以用DMA来控制,DMA从flash中取出数据,放到USART的发送缓存中,这样就不用CPU进行控制了,CPU就处理完数据后返回采集数据就行,就能有效提高频率。

一般DMA可以配合I2C,SPI,USART等等进行操作,也可以脱离这些,单纯从一块flash搬运到另一块flash,DMA的主要目的是减少CPU的参与,使CPU有更多时间去做别的事。DMA就一控制器,没有办法与外部进行连接。


一禾嵌入式


写半天也没说明白。DMA是为了大数据量高速设备快速存取数据,I2C是低速总线,面向低速小数据量接口。


分享到:


相關文章: