Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59333
  • 博文数量: 23
  • 博客积分: 270
  • 博客等级: 二等列兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-31 11:01
文章分类

全部博文(23)

文章存档

2013年(21)

2012年(2)

我的朋友

分类: 嵌入式

2013-01-04 15:51:29

    首先定位:第一软件工作人员的视角,第二入门级,第三,嵌入式产品大架构。
    只是一个入门级技术人员的视角,并不从产品工程师或者消费者的视角,这种视角思维是不能做产品的。因为现代产品必须人性化才好卖。
    真的很不知道从哪个入口来讲嵌入式产品的大架构,就从硬件连接开始讲吧。
硬件的结构,大家肯定会想到冯诺依曼结构和哈佛结构,这两种结构的优缺点比较已经属于细节了,不算是大架构的内容,在此略过,不过提一下。现在的处理器,依托CACHE的存在,已经很好的将二者统一起来了。这两种结构硬件上都有五部分,运算器,控制器,存储器,输入设备,输出设备。
        目前的嵌入式产品一般是把运算器,控制器,极小部分存储器集成在SOC中,然后SOC和存储器,输入设备,输出设备相连接。
       硬件部分就从SOC讲起,肉眼上一看就是块芯片,顶多引脚非常多罢了。但集成度非常的高,我们也不可能把具体的内部结构给搞清楚,要不然英特尔公司或者AMD公司或者ARM公司老早招你去上班了。但至少我们要看得懂上千页的SOC芯片的datasheet。如果把arm芯片和我们PC比较的话,一块SOC芯片等于集成了CPU,北桥芯片组,南桥芯片组的功能。类似于PC机的总线,SOC芯片内部也有总线,arm片上系统一般用的是AHB,APB总线。
    现在用白话文说说总线到底是什么。在相当长的一段时间内我不是很理解什么叫总线,百度百科也看过
还是不怎么理解,今天我这个没学过硬件的人就在此说说我目前对总线的理解吧,如果有不对,希望有人指出,万分感谢。总线,肯定是线,而且是导线,这就是最直观的一点,可能在芯片内部已经不能算是导线了,但依旧行使着导线的功能,导通电流。既然能导通电流,自然有传输电信号的作用了。这是总线的第一层含义。第二层什么叫总?总的含义和总线的英文名BUS的各一个含义公交有点相似,公交就是大家都可以坐。总的意思就是大概大家都可以连接,总线的白话含义差不多等同于大家都可以连接的导线。大家是什么意思呢?电子元器件设备咯。这么说大家马上就能想到不对啊,鼠标是设备,也没能连接到PCI总线上啊。
哈哈,总线和公交到底还是有一点差别的,总线还包括了总线规格和总线协议。你看USB鼠标有四条导线,
PCI总线有几条导致,这都让你连接上还有天理!总线包括了总线规格和总线协议,这些包括有几条导线,各条导线传输电信号的时间顺序是,多长时间改变一次电路状态(总线频率),总之要让连接在总线上的两个人协调工作不能乱了套,谁在什么时候可以改变电路状态(即总线状态),谁在什么时候读取电路状态(总线状态)。arm片上系统AHB,APB总线连接上片上系统的所有模块,使他们协调工作。这两个总线的规格,和协议应该都被硬件给搞定了,芯片内部结构设计时硬件就设计成了各模块什么时候改变总线电路状态,改变总线中的哪一根线或者哪几根线,什么时候读取电路状,读取总线中的哪一根或者哪几根线。总之硬件上设计得完全符号AHB,APB总线了。所以对于软件工作人员几乎感觉不到片内总线的工作原理,最多只能设置几个寄存器来改变总线频率(通过倍频原理)。
   说完总线,顺便提一下,另外一类线,我也不知道该叫什么线。但至少是导线,比哪说uart接口,他同样有线的规格和协议,但它只能连接一个设备,只是因为总结协议中没有包括一些具体的控制权的协议,如果连接多个,就不能协调工作就乱了套。不过这不是绝对的,也有高手随手给改变点什么就让这个线上的多个设备给协调工作了。哈哈。
    任何要连接上总线的都必须符合总线的要求,哪怕你是arm内核也是如此,因为必须要协调工作。再回到arm片内总线, AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连, APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。
    看到soc最直观的是什么,应该就是引脚了,芯片内部的各个模块,各种总线连接,我们真心看不着,只能通过芯片手册了解到。但引脚可是一看到芯片就能看到的。这些引脚是连接到片内总线上的各种各样的外设控制器在向外设招的手,告诉外设,嘿,我在这里,你可以连接过来。
    然后外设就可以连接上去了,至于是如何连接的。哪根引脚对应外设的哪根引脚,可以通过SOC芯片手册的外设控制器部分和外设的芯片手册查到。然后外设控制器和外设通过这此引脚中的电信号的传递,就把外设的信号传输给外设控制器了或者外设控制器就把电信号传输给外设了。接着外设控制器把信号传递给arm内核,然后就把信号给处理了。有人又会说不对了,不少引脚都可以同时连接到不同的外设上。这个问题我也想过,我想会不会是SOC内部的控制器同一时间只有一个在工作,所以连接到不同的控制器上的引脚可以分时复用,而连接到同一控制器上的外设也有共用引脚的情况,这个我倒是知道,还有片选信号的引脚,控制器可以通过此信号来知道是哪个外设传来的数据。
   除了这些外设控制器的引脚,比如说ADC引脚,比如说LCD引脚,比如说DDR引脚(当然这此引脚都还需要自己做简单配置)。还有各种总线的引脚,比如说USB总线,IIC总线,SOC芯片内部和这些引脚对应的又是什么模块呢?可以说是这些总线的控制器,但也是一种总线的设备(只要能连接在某种总线上的就是某种总线设备,你可以说arm内核就是AHB设备),但这种总线设备又有点区别于其他的总线设备,他另外一端还连接到另外一种总线上了(其实就是桥)。然后通过这些总线引脚我们可以连接各种各样的符号总线接口的外设。但此时外设还不能工作,因为只是符合总线接口,还没总线上的信号来控制外设工作。这不像片内总线,片内总线的信号已经被硬件化了。而外设总线必须靠总线上的信号来协调工作,总线上什么时候来什么信号,怎么反应是属于总线级别的驱动,这也需要靠软件来完成,但相对来说比较简单基本上是时序的内容。只要时序不出错就能协调了,但外设还得对传来的信号进行处理,其实说白了就是对符合总线时序的某 些信号进行解释。举个例了,USB 的U盘和USB的鼠标,他们在USB总线上传递的信号必须符号USB协议。但其间传输的数据代表的完全不一样,鼠标传递的是偏移量,U盘传递的是存储的某些数据,至于对这些数据怎么解释,以及发什么数据代表要求外设做什么工作是USB设备驱动程序的工作。这样就应该就说清楚USB总线驱动,和USB总线设备的驱动的关系了吧。至于驱动会有多复杂一要看外设,对数据的封装以及外设控制器号的复杂度,二要看驱动程序对上级操作系统的接口,三还要看目前存在的驱动程序的架构,因为所有的驱动程序要共享一些资源,比如说中断。
   上面非常别扭的讲完了SOC以及SOC引出来的引脚,最后讲外设。DDR(片外作为内存使用的一种设备)也算是外设,但他也是冯和哈结构中的存储器,各种SD卡,TF卡也是外设。
常见的外设有:
1,ddr
2,nand flash,nor flash
3,一些提供时间的芯片
4,显示器(包括lcd)
5,键盘
6,触摸屏
7,声卡
8,无线通信模块(包括2G的GSM,2.5G的GPRS模块,3G的CDMA之类的模块,WIFI模块,蓝牙模块等等)
9,GPS(这个比较有意思,卫星挺贵的,应该是美国军方的,他们只问GPS模块芯片者收钱,所以别以为是白用的,天上没有白掉饼的)
10,摄像头(现在一般都是CMOS型的吧)
11,传统网络模块(包括以太网卡,令牌网卡)
12,TF卡,SD卡之类的存储设备(个人感觉和flash芯片的读写速度没什么区别,不信的话可以把操作系统安装在SD卡上试试,前提是你的主芯片要支持从SD卡启动,具体启动有点意思的,有兴趣自己百度)
13,投影机
14,HDMI(不太清楚这个所谓的高清输出是什么,没看过资料)
15,红外线模块
16,重力感应器
17,电源管理芯片
18,游戏手柄
19,定时器芯片(不少集成到SOC里了)
20,光线感应模块芯片,加速度感应器模块芯片,方向感应器模块芯片,距离感应器芯片,陀螺仪感应器芯片
21,还有一些暂时想不起来的芯片
上面是电子消费产品中常见的,还有工业控制中的模块那就不太了解了
不过常见的压力传感器,温度,湿度采集器,红外线模,电机模块(玩五一的的应该非常熟悉),
一些电磁波的采集器
软件工作人员要写一个外设的驱动程序就要看这些外设的芯片手册,至于这些外设具体是如何实现的一般软件工作人员就知道个大概,毕竟不是制做外设的工作人员。外设对采集来的数据一般都会有简单的封装,再传输给外设控制器,软件工作人员只需知道封装成什么样然后把数据拿来用代码进行处理就行了。
 
对于我这种硬件还没入门的人,软件刚入门的人来说,要写这么一篇着实不容易啊。不过这种入门级的文章,不仅入门,还科普。算是一篇技术类的科普文章吧。
阅读(626) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~