串行通讯总线在嵌入式体系中是必不可少的一部分,处理器经过UART、I2C等这些总线来访问各种外设。假如您是一位嵌入式工程师,信任您必定和这些串行总线打过交道。那么串行总线协议的这些坑,您有没有遇到过呢?
比方,I2C总线忘了接上拉电阻,串口波特率不匹配,RS485忘了进行方向切换或许没有接终端匹配电阻,USB全速和低速形式该在哪根线加上拉、下拉电阻傻傻分不清(现在上下拉电阻都集成到处理器内部,今后不会再被坑了)等等。咱们的一位客户最近就被SWD总线坑了一把,来看看他是怎样入的坑,又是怎样跳出的坑吧。
这位客户用编程器经过SWD总线对一款Cortex-M0芯片进行编程时,因为无法进入测验形式而无法对芯片编程。束手无策之下,客户找到了咱们。咱们的时序工程师仔细分析芯片数据手册后,发现该芯片编程时序的握手环节和其他芯片有显着差异,因而咱们猜想客户的编程器很可能是和芯片握手失利才无法进入测验形式。
下图是芯片握手时序图,能够看出时序要求十分严厉。只需总线握手成功,芯片进入测验形式,编程器即可获取芯片ID,并能够对芯片编程。假如总线握手失利,芯片就会开端履行片内Flash的用户代码而无法进行编程。
因为芯片的时钟精度、boot code文件巨细不同,因而不同版别芯片的内部复位时刻、boot code履行时刻都有差异。为了保证芯片能正常进入测验形式,咱们在将芯片时序添加到致远电子最新推出的4通道在线脱机编程器P800-ISP上时,进行了特别处理:当P800-ISP向芯片宣布复位信号后,当即重复发送SWD总线复位信号,直到获取芯片的应对。SWD总线树立衔接后,P800-ISP经过设置芯片的TST_CTRL寄存器,使芯片进入测验形式,之后就能够对芯片的Flash正常编程了。
总结:
有了这个东西,串行总线使用不再是难题。