Antkillerfarm Hacking V7.5

Chip » 硬件杂谈(一)

2015-02-15 :: 4496 Words

开篇的话

自从改行做起了驱动软件工程师,好多硬件的问题已经不再像当初那样,可以忽略不计了。于是就有了以下的心得。

0欧电阻的作用

在硬件原理图,特别是硬件草案的原理图中,常可看到0欧的电阻。0欧的电阻在效果上当然等同于导线,辛辛苦苦把它引出来焊上,究竟有何用处呢?硬件的同事告诉我,他们一般只在某些新添加的电路上使用这东西。一旦由于某些原因需要去掉新添加的电路的话,只要用电烙铁把电阻取下来就可以了,而不用再造一批测试版。

参考:

https://mp.weixin.qq.com/s/1DohVLPca8mj5sn4XL-u-g

0欧电阻、电感、磁珠单点接地时有什么区别?

空指针

空指针的概念,本来主要是个软件概念。上学的时候,教C语言的老师,就反复强调要检查空指针。

课本上给出的标准做法是:

1)声明一个指针变量,并初始化为NULL。

2)在程序执行过程中,指针被赋值为一个有某种含义的非空值。

3)使用该指针前,检查其是否是空指针。

这里就有疑问了。C语言中所谓的指针,保存的不过是个地址值。请看下面的例子:

int a[10];
int *p = a;

在这里p表示数组a的首地址,p+1表示a[1]的地址,那么p-1呢?在通常情况下,这也是个有意义的地址,只不过我们不知道它属于哪个变量罢了。所以课本中的做法的一个隐含的前提就是,NULL不属于任何变量。否则的话,对于以NULL开始的变量来说,检查空指针显然就毫无意义了。

对NULL的特殊性还有所怀疑的同学,可以试试往p-1中写数据和往NULL中写数据,看看在执行的时候,现象有什么不同。

从硬件的角度来说,32位的处理器有32位的地址总线,因此理论上说它的地址空间也是32位的。但是并非32位的地址都是有意义的。在一些嵌入式设备上,可能外设会占掉一部分地址空间,内存会占掉另一部分地址空间,其余的都是未定义的地址空间。向这些未定义的地址读写数据,会产生错误,通常的表现就是产生了一个异常或者中断。

在PC上,由于外设和内存有各自独立的地址空间,再加上虚拟内存的关系,这种未定义的地址空间是没有了,但是NULL开始的一段地址空间,会被定义为保护段,对其的读写同样会引发异常或者中断。(关于PC的结论,仅针对一般的用户态程序,内核态程序不适用。)

因此往NULL中读写数据的BUG,通常是比较好解决的。而往p-1中写数据的BUG,没有相当的技巧或工具的话,是很难解决的。

IRQ与FIQ的区别

IRQ(Interrupt Request):指中断模式。

FIQ(Fast Interrupt Request):指快速中断模式。

是ARM处理器的两种不同编程模式(ARM有7种处理模式)。

1、对FIQ你必须进快处理中断请求,并离开这个模式。

2、IRQ可以被FIQ所中断,但FIQ不能被IRQ所中断,在处理FIQ时必须要关闭中断。

3、FIQ的优先级比IRQ高。

4、FIQ模式下,比IRQ模式多了几个独立的寄存器。

不要小看这几个寄存器,ARM在编译的时候,如果你FIQ中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间。

5、FIQ的中断向量地址在0x0000001C,而IRQ的在0x00000018。(也有的在FFFF001C以及FFFF0018)

写过完整汇编系统的都比较明白这点的差别,18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。

6、IRQ和FIQ的响应延迟有区别

IRQ的响应并不及时,从Verilog仿真来看,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。

pin 1

一般的排线为了能够方便的识别pin 1,通常会在pin 1处标一个小三角,并且pin 1线的颜色也与其他的线不同。

单火线

最近研究智能家居,提到了单火线的概念,现简要描述如下:

这是一个接入电网的灯泡的原理图,图中的两根线,上面的是火线,下面的是零线。实际生活中的那些没有开关的插座灯泡就是以这样的方式接入电网的。

这是普通的开关灯泡的原理图。

这是单火线家居灯泡的原理图。从拓扑结构上来说,这个图和上一个图的结构是一样的。之所以画的时候故意弯曲了一下,是想表明一个事实:开关和灯泡之间有一定的距离。实际上对于一般的家居灯泡来说,零线、火线、开关和灯泡之间的线都是建筑商在建筑施工时,布设在墙体内部的。

那么问题就来了。由于开关和灯泡是串联的,当我们将传统的机械开关替换为智能开关的时候,由于开关本身没有和零线直接相连,因此当灯泡处于关闭状态的时候,开关本身也将无电可用。

解决的办法:

为开关再接一根线。

这就是所谓的零火线开关。但这样做的问题是,需要重新在墙体内走线布线,有比较大的施工量,对于已经入住的房屋来说,并不是太现实。这也是阻碍智能家居走进家庭的一个重要的技术问题。

单火线取电

通过加装电容等储电元件,可以给开关提供断电时的能源。但由于开关和灯泡是串联的,当灯泡本身的功耗较小时,储电元件的微小电流不仅会维持开关的工作,亦会点亮灯泡,造成灯泡在关闭状态下仍有微弱的光亮,即俗称的“鬼火”现象。这个在低功率的LED灯上,表现的十分明显。


https://kexue.fm/archives/9405

智能家居之热水器零冷水技术原理浅析

ISP与IAP

ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。

IAP(In-Application Programming)指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。

与ISP、IAP相对应的是早期单片机所使用的存储器烧写器,该方式需要从电路板取下存储芯片,安装到烧写器上烧写之后,再放回原电路板。这种传统的方式目前已经用的非常少了。

硬件调试器

Lauterbach TRACE32

TRACE32是我见过的功能最强的硬件调试器,没有之一。

它有两个系列:

PowerDebug:这个是简装版。功能大致和J-LINK差不多,但售价上千,差不多得是后者的十倍了。

PowerTrace:这个豪华版本,不但能调试,还能够记录运行期间执行的所有指令。这对于一些内存越界问题尤其好使,因为内存内容被改写,并不会导致程序立即崩溃。只有该内存再次被使用的时候,才会有异常发生,但这往往已经离破坏现场很远了。

PowerTrace唯一的缺点就是太贵了,得上万元。

SEGGER

SEGGER的硬件调试器也分了两个系列:

J-Link:简装版,只能用于调试。价格在百元左右,已经成为事实上的王者。破解降价什么的江湖传闻,看看就好,硬件想加密,办法多的是。这完全是SEGGER的市场策略吧了。

J-Trace:没用过,看说明应该和PowerTrace差不多。

https://www.cnblogs.com/neverguveip/p/9457261.html

浅论各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别

https://blog.csdn.net/sunheshan/article/details/24535735

J-Link、J-Trace、Open JTAG区别

Open JTAG

开源的硬件调试器,但是由于需要自己找厂子做,所以价格上不可能比J-Link这种规模产品低,所以始终不温不火。

官网:

https://sourceforge.net/projects/openjtag/

ST-Link专门针对ST芯片而设计,包括ARM core以及非ARM core。

OpenOCD

OpenOCD(Open On-Chip Debugger)是一款开源软件,最初是Dominic Rath在大学期间发起的(2005年)项目。

https://zhuanlan.zhihu.com/p/41517198

跟我一起学OpenOCD

硬件爬坑记录

某次驱动死活跑不对,用示波器测量时钟信号,发现信号为三角锯齿波。初步怀疑是接上了电容后的信号。硬件工程师排查后,果然如此。


某型固件,没有打印函数,也没有断点调试工具。使用GPIO,到达程序某点之后,即改变当前的电平。然后在示波器上数电平翻转的次数,以确定程序执行到了哪里。


某芯片,外接4GB内存,运行正常。外接8GB内存,发生hung。最后发现,8GB内存需要更大的电流才能启动。因此,在此期间,芯片应该避免执行耗电的操作。

USB

Lightning的8针接口只有一条用于电流输送,最大电流也不会超过3.3A,4条数据传输线最高也只能实现480Mbps的传输速度,这些设计上的缺陷都不是后期优化可以解决的。

过流保护有个前提条件,可以说是防君子不防小人的。不知道大家注意没有,被保护的只有VBUS,没有保护数据信号D+/D-。What if攻击的是数据信号呢?

USB Killer利用VBUS为电容充电到200V,然后反向将它们释放在数据信号上,瞬间击穿了PCH南桥芯片,造成永久的损坏。

https://mp.weixin.qq.com/s/pL_98GmL2qkvt71hw6A-DA

终结混乱,USB族谱终极整理!

https://mp.weixin.qq.com/s/EDv1ArAG5s8al33FoBfmfQ

USB的前世今生

https://zhuanlan.zhihu.com/p/65478149

为什么USB Type C电缆正反插都可以?它是怎么做到的?

https://mp.weixin.qq.com/s/dk_sl3OvPwvnRWPpPJ4D_Q

USB3.1 Type-C高速接口设计指南

https://zhuanlan.zhihu.com/p/153254485

为什么短路的USB设备不会烧掉你的主板?著名的USB Killer又是怎么干掉主板的?

https://view.inews.qq.com/wxn/20220608A0D8H200

Type-C成为通用接口,苹果告别“躺赚时代”?

https://www.zhihu.com/question/31304026

为什么两台电脑不能直接连接USB传输文件?

https://www.zhihu.com/question/571811693

现在usb口普遍都有过流保护为什么还会烧南桥的例子啊?

Fork me on GitHub