资讯详情

一颗电阻的旅行

最近一直在开发ARM系统的JTAG调试器,这不是一个小项目,有很多事情要做。更准确地说,这项工作始于去年4月,这是探索道路和验证可行性的第一轮努力。

春节前的最后一轮努力是产品化,涉及到开发一个包含一个小电路板的小电路板ARM M实现系列微处理器的任务ARM公司的SWD访问目标系统的协议。

我们把这个小的嵌入式系统命名为Nano Target Probe,简称NTP,中文名为挥码枪,指挥01010等二进制码流。

8f7676001595db319a9266dbbfcea764.png

众所周知,在过去的一两年里,一直存在芯片缺货的问题,几乎是整个芯片缺货IT业都受到影响。前些天和INTEL老同事聊天,甚至主要生产芯片INTEL因为INTEL还需要其他公司的芯片。

于是,原来十几块钱STM32从100元到几百元不等。

但涨价也没有办法,该上的项目还是要上。

在选择了一块开发板后,我们开始为M核的挥码枪准备软件。ARM处理器分为A、R、M三大系列,A最强大的系列是跑步Linux或者Android这样的操作系统,M系列最弱,不支持虚拟内存,主频一般不到100M Hz,内存和外存通常相对较小。我们为挥码枪选择的M核最大频率为72MHz。

简单来说,格甲所做的就是用M核挥码枪调试A核GDK8。

软件编译和刷挥码枪后,下一步是调试。委托硬件公司设计的板还没有回来。为了赶时间,我们不得不在开发板上建立一些电路。有些电路很容易建造,只要用杜邦线连接,但下面的电路很难击败小型软件合作伙伴。

简单来说,这个电路是将输入和输出合并为可以输入和输出的信号,即SWD在三个信号中SWDIO。

SWD是Serial Wire Debug的缩写,意思是通过串行通信来实现调试。经典的JTAG接口有TDI、TDO、TMS等9个信号,SWD把它缩小到三个,这是ARM公司杰作。

我在英特尔工作了十多年,当时我不太明白ARM。创业后慢慢认识ARM。如果有人问我,英特尔平台和ARM平台最大的区别是什么?简单来说,两者哲学不同,定位不同。

以调试接口为例,标准JTAG接口是英特尔的9个信号ITP接口是25个信号,后来进一步扩展XDP是60针的特殊接头。

不要低估这个接头,这个接头是一公一母,加上特殊的扁平连接线,但不便宜。

而ARM呢,觉得JTAG标准9针信号太多,要做的少到三个,一个必不可少的地方,一个时钟,一个输入输出。其实定义为四个比工业标准节省了一半,I/O分开,但是ARM将其定义为三条线,一条线既做输入又做输出,或者一段时间做输入,一段时间做输出,经常改变方向。

上面有一个小电路,里面有很多东西。有人问,既然右边是SoC以这个信号为输入和输出,那么为什么左边的M核要使用两个信号呢?

因为M核慢,SoC主频一般为1G以上,M核只有几十个M。上G主频A核SoC对于入和输出而言,频繁切换没有问题。它速度很快。但对于M核,如果使用信号进行输入和输出,并且频繁更换模式,则非常缓慢。因此,三叉电路是精心设计的ARM公司杰作。

有人说多信号少信号重要吗?

为了节约成本,降低价格,ARM这个平台使用了足够的大脑。每个地方都要找到优化的机会,几十年后,不断积累,不断优化。所以今天,英特尔平台的调试界面可以买到很多块ARMM核芯片。

然而,节约成本也是有代价的,有时会导致一些不便。例如,上述三叉电路将两个信号混合成一个,用赵本山的话说,两排破坏(混合)是一排。但为了直接连接左芯片的两个信号,导致短路,增加了电阻,即电路图中的电路R1.阻值为100欧姆。

对于硬件工程师来说,这个电路太简单了,很容易找到电阻。但对于软件团队来说,这并不容易,也不能直接用杜邦线来完成。

怎么办呢?

这时,我突然想起前几天整理旧东西的时候,看到一个小电路板,是女儿上信息课的小作品。几年前,电池的电用完了,没用。

但当时我没有扔掉这个小电路板,而是把它放在背包里,第二天上班带到办公室。

所以我很快就在办公室里找到了电路板。

更重要的是,看看上面的部件,只有一个100欧姆的电阻,即R3。

巧合的是,当缺少100欧姆的电阻时,我刚刚找到了100欧姆的电阻。而且这个电阻是老式的,比较大,手工焊接,没有新的贴片机小。

接下来是老程序员向年轻程序员展示硬件技能的时候。找出电烙铁,加热,熔化焊点,从废电路板上取下100欧姆的电阻。

下一步是找一段铜线,然后焊接上面讨论的三叉戟电路。三叉戟电路用了不到五分钟就完成了。

三叉电路实现后,原本停滞的测试任务可以继续。而且进展很快,春节前通信,中断恢复运行。

春节前,我忙着发布挥码枪GDK8.武城版还没有完全完成。一个大问题是USB协议在挥码枪和上位机之间USB接口,但主机识别USB设备不稳定,往往无法识别。

不稳定是不可接受的,所以春节后一上班,我们就调试挥码枪USB识别逻辑也不容易调整,尤其是没有USB分析仪。试着找几个软件分析仪,但是很不给力。

经过一周的努力,USB电源管理是解决问题的主要原因之一。前面说过ARM平台的一大特点是价格低廉。另一个相关特点是功耗低,省电。

为了省电,包括USBD(USB设备端)。春节前不稳定的原因有时是USBD被下电(Power off)或者挂起(Suspend)是的,为了省电。有时候碰巧能工作,因为我让它在休眠前开始工作。找到根源后,可以稳定识别,百发百中。

但还有一个问题,那就是主机发出了挥码枪的命令,没有回复,仿佛石头沉入大海。

昨天快下班的时候,终于找到了原因,不是挥码枪的问题,而是主机端的问题,主机端的代码也是新的,很多都是枚举主机的USB当设备出现把另一个烧录器设备当挥码枪,所以NDB发送的所有命令都发送给烧录器,根本没有发送挥码枪。

昨晚发现问题,赶紧下班。

今天是星期六。我去办公室加班,想摆脱昨天发现的问题。我以为很快就会解决这个问题,但在改变它之后,有一个新的问题,主机使用libusb图书馆无法打开挥码枪设备,报告No Entity Found。

于是又一次跟踪,libusb代码也是独特的写作风格,很多超大函数,一个函数往往是几百行。但是没有办法。别人免费开源已经很好了。

打不开的原因是libusb没有找到合适的后端。挥码枪是USB一个硬件上有多少复合设备?USB但是操作系统安装了设备WinUSB一般复合设备不使用驱动usbccgp.sys,就这样libusb头晕。匹配后端操作函数时,未安装合适的操作函数。winusb函数。

看着几百行的大函数,我不想改变它。所以先升级,从1.0.21升级到1.0.但问题依然存在。

夜幕降临时,我想出了一个解决办法,还是修改了挥码枪上的固件,修改,烧录,再试,成功了。

看着窗外,魔都已经昏暗了。

顺便说一句,下周六有一门公益课程——在调试器下体验编程前,春节休息了几周。

此外,格甲在3月份继续代表他C 技术会议(官网http://cpp-summit.org/),欢迎老朋友从格甲买票,格甲会给你额外的礼物(^_^)。

(写文章很难,请点击看,也欢迎转发)

************************************************

正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生

扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物

也欢迎关注格友公众号

标签: 483ai贴片电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台