经常听人说:固件工程师就是搞硬件而已,只要弄好给个API就没什么事了。嗯,咋一听好像还真有那么点道理,不过,外行看热闹,内行看门道,就好比老板看你敲了半个月代码,这时候来一句“这个功能换一下,不就是改下代码吗,今天给我搞定。”,此时心中是否有一万只小羊驼奔腾而过?
编程的人怎么也懂点计算机硬件知识吧、难道修台式机的人还不懂怎么修笔记本吗?当初学计算机软件技术的时候,我可没少让人喊去帮忙修电脑。固件工程师其实也一样,除了要熟悉OS跟硬件部分外,一些简单的软件应用也会有所了解。谈不上内外兼修,只为更好的混口饭吃。
除了这些,其实有一个东西不管什么固件工程师都必须要会的,那就是阅读原理图。
原理图就是电路原理图,是用于让人们更直观的了解设备控制电路元器件及电气连接情况。图中用直观的符号通过与规则或不规则的直线连接(当然也可以是曲线),而我们通过原理图,能够辨别出主板各个电路的工作顺序及工作原理。另外,原理图用来排查故障也是非常实用的。
一张完整的电路原理图一般会用到以下几种图形符号:
1、学过物理我们都知道这个在图纸上代表的是电阻,不过在国外,大部分电阻使用的是波浪形式的图形符号;
2、“两个锤子”我们代表电容;
3、“M”形的表示电感器(电感器:指的是能够把电能转换成磁能进行存储的元器件。);
除了图形符号,电路原理图上还会有文字符号,像上面所表达的三种分别可以用文字符号:R、C、L表示出来。
我们在画电路图的时候,就像写代码一样,虽然没有明文规定要按什么格式写,但是一些比较通用的画法还是要了解的。
我们所了解电路图一般都是从左往右处理信号信息,如果两条实线较差而没有图文符号,则表示两条线路没有交互,如果两条线交接处有图形符号,如圆圈,则表示两条线路在此处串联在了一起。
电路原理图解析实例
这是一个intel开源硬件平台MAX的原理图。
示例图芯片是BayTrail-l处理器,即e3800。既然知道了芯片,那么我们从intel下载e3800的数据表。原理图左侧分别为两个USB接口(一个3.0、一个2.0),下方的SD3为SD卡读卡槽跟一个硬盘接口;右侧第一个红色框我们能够看到4个DDR3L内存颗粒,原理图无法看出内存大小,不过工程师们可以自行根据页面给出的信息查找;数据直接传输技术能够通过uHDMI显示画面,也可以烧写固件。
左下角的GPIO,一般设置成GPI/GPO/GPIO/Tri-State/Native态。下图为板载串口部分原理图,从图中可以看到SOC的BD14跟BC16引脚。
两个引脚通过了中间的TXS0102YZP芯片后连接到了右边的电池形状的J4芯片。有人会问BD14跟BC16不是GPIO串口吗?后面为什么又变成了PCU?还记得文章刚开始前下载的芯片数据表吗?
根据数据表所示,我们要将GPIO串口的57跟61分别设置成native F1。因为Intel的MAX是开源的,所以能够在Github上EDKII platforms的branch找到它的源程序将GPIO_S0_SC_57/61两个代码设置在EnableInternalUart函数中。
因为篇幅关系,这里只举了Intel的板子,如果感兴趣的朋友可以关注下,下期整理完后再与大家分享。
PS:有一次笔记本开机不了去找老板修,结果老板先从供电芯片开始查起。发现供电芯片短路,换完后机子还是不行,于是又查到了南桥,发现南桥的一个元器件也短路了,不过换完后,电脑还是不能正常开机,最终查到了USB充电接口有问题。就是那个蓝色的USB接口短路了,我到现在没弄懂是为什么。