打造会议硬件徽章全指南
最近,有人建议为即将到来的信息安全会议制作一个硬件徽章会很有趣。虽然我在电子电路设计和软件开发方面有扎实的背景,但会议硬件徽章对我来说是一个相对较新的概念。幸运的是,我儿子在信息安全领域工作多年,并且是会议徽章的狂热收藏家。在查看他收藏的一些徽章并进行多次谷歌搜索后,我很快发现会议徽章的范围从非常简单的酷炫闪光灯板到更复杂的“CTF”可黑客化印刷电路板(PCB)不等。
电子设计阶段
这是我构建硬件徽章整个过程中最喜欢的部分。首先,我需要为徽章想出一个既有趣又具有教育意义的主题。我决定模仿Milton Bradley(现为Hasbro)于1978年推出的电子游戏“Simon”。这个流行游戏生成一系列音调和彩色灯光,要求玩家重复序列。随着游戏的进行,序列会变得越来越长。由于这个硬件徽章面向信息安全受众,我决定将其命名为“CyMon”,作为一个文字游戏。
软件平台
过去几年,我一直在使用Arduino IDE和Arduino Uno开发板进行大量的软件/硬件开发。Arduino Uno开发板使用Atmel ATMega328P微处理器,是一款非常经济高效的16MHz处理器,提供14个数字输入/输出引脚(其中6个可用作PWM输出)和6个模拟输入。网络上还有大量基于Arduino的信息,找到基于Arduino的Simon游戏示例相当容易。
Arduino IDE具有一个易于使用的图形用户界面(GUI),可以轻松编写代码并上传到开发板。开始使用Arduino IDE的具体细节超出了本文的范围,但可以说,学习曲线相当短,特别是有了Arduino社区、论坛、博客作者和网络支持的所有帮助。
开始使用面包板
现在我们有了CyMon徽章的主题,我们可以开始收集所需的组件来搭建电路。同样,学习如何搭建面包板本身可以是一篇文章,本文假设读者具备面包板构造的基本知识以及如何互连各种组件。
基于Simon游戏的概念,我们需要4种不同颜色的LED(发光二极管):蓝色、绿色、红色和黄色。我们还需要通过330欧姆电阻限制通过这些LED的电流,以免超过LED规格并烧毁。
此外,我们需要4个瞬时(常开)开关来捕获用户的游戏选择。通常,开关的一侧通过10k电阻上拉到Vcc(3.3伏)。开关的另一侧连接到地(0伏)。当按下按钮时,开关闭合,将信号从3.3伏(数字1)变为地(数字0)。注意:为了减少按键抖动( chatter),我们将使用0.1uF陶瓷电容将开关旁路到地。
对于音频音调,我们需要一个压电(扬声器),并且为了与用户通信,我们将使用I2C OLED显示屏。除了4个游戏开关外,我们还将包括另外2个瞬时(NO)开关。这两个开关将是处理器的复位开关和新游戏(重新开始)开关,并且需要相同的10k电阻和0.1uF旁路电容。
最后,对于微处理器电路,我们需要ATMega328P 28引脚微处理器、一个16MHz晶体(用于微处理器的高速外部时钟)、(2)个22pF旁路电容(用于时钟稳定性)以及一个拨动(电源开启)开关。面包板可以使用3.7伏可充电CR2032纽扣电池供电,因此我们需要一个纽扣电池座和几个10uF电解电容用于电源轨。
组件列表
- (4) LED:蓝色、绿色、红色和黄色
- (4) 330欧姆电阻
- (6) 触觉瞬时(NO)开关
- (6) 10k上拉电阻
- (1) 压电(扬声器)
- (1) OLED显示屏
- (1) ATMega328P微处理器
- (2) 22pF陶瓷电容
- (1) 16MHz晶体振荡器
- (6) 0.1uF陶瓷电容
- (1) 滑动DPST拨动开关
- (1) 纽扣电池座
- (2) 10uF电解电容
查看组件列表,我们应该注意到大多数是被动组件(通常不受反极性或电压问题等影响)。在列出的组件中,微处理器和OLED显示屏被视为有源组件。如果接线不正确或承受超过设备额定值的高电压水平,有源组件可能会严重损坏。同样,必须注意有源组件的接线,确保Vcc仅连接到相应标记的引脚。将Vcc直接连接到GPIO(通用输入/输出)引脚可能会永久损坏设备。这在我们测试原型PCB时会变得更加相关。
注意:虽然电阻、电容和开关被视为被动组件且不易损坏,但在高电流或高电压水平的极端条件下,如果电路设计不当,任何组件都可能损坏。话虽如此,本文中描述的电路是非常常见的配置,消耗的电流非常少,通常在3.3伏到5伏下运行。显然,在面包板阶段损坏的组件对整个构建过程的影响要比在原型测试阶段小得多。前者只需从面包板上取下损坏的组件并更换设备,而后者需要特殊的表面贴装设备(SMD)设备和工具来移除损坏的设备。同样,在没有首先检查有源组件的正确方向的情况下为(后者阶段)原型板供电可能会是一个大问题(正如我们即将看到的那样)。
如何获取单个(子电路)组件设计的帮助
在面包板阶段,设计硬件徽章整体电路时,我发现进行谷歌搜索以获取如何实现各种子电路的想法很有帮助。例如,我们可以搜索“Arduino OLED display DIY”、“Arduino piezo DIY”、“Arduino momentary switch DIY”、“Arduino LED DIY”等。
这些搜索链接不仅提供了有用的接线图和优秀的教程视频,通常还提供了可以上传到Arduino Uno开发板以测试和调试代码的示例草图(代码块)。一旦您验证了特定子电路按预期工作,您可以将组件及其接线移动到主面包板上。
接线ATMega328P 28引脚微处理器双列直插封装(DIP)
设计自己的电子电路的一个巨大步骤是了解开发板微处理器的详细信息,并将该微处理器纳入面包板。仔细检查Arduino Uno板载微处理器,您会注意到它使用28引脚DIP封装的ATMega328P设备。
有了这些知识,我们现在可以在面包板上安装ATMega328P处理器,并利用Arduino Uno开发板的大部分功能。下图显示了ATMega328P的逐引脚接线及其相应的少量组件(16MHz晶体、2个22pF电容、复位瞬时开关和10k电阻)。此图中还显示了一个LED和相应的330欧姆限流电阻(作为示例)。比较两个图,我们可以看到LED连接到处理器的引脚19,映射图指示引脚19对应于GPIO-13(数字引脚D13)。额外提示:在代码中将GPIO D13设置为高(3.3v)会打开LED,设置为低会关闭LED。
现在我们的面包板已经启动并运行,我们可以将引脚2(RX)和引脚3(TX)(以及GND)引出到面包板上的空位。这两个引脚是处理器的串行UART(通用异步接收器/发送器),当连接到TTL-USB适配器时,允许以与编程Arduino Uno相同的方式编程ATMega328P设备。由于有许多不同的编程ATMega328P的方法(使用TTL-USB的UART、使用FTDI-USB的SPI、USB-ISP、USB-ASP等),这些编程步骤更适合后续文章。
有了功能正常的面包板“测试台”,我们可以编写Simon游戏代码,编译代码,并将固件上传到处理器以进行彻底测试和调试。编写代码以及测试和调试代码本身是一个持续的过程。花费多少时间直接与您想要超越创建功能正常的Simon游戏所需的范围有关。
就我而言,我决定让我的硬件徽章可黑客化。我添加了一些代码,使用UART(通用异步接收器/发送器)连接,我可以连接TTL-USB适配器,然后使用像minicom这样的终端程序访问代码中的shell,以发现隐藏菜单和隐藏的CTF挑战。UART串行接口允许徽章和终端程序之间的双向通信。例如,终端程序可以接收处理器可能发送的任何数据并在其控制台中显示。
正如您可能猜到的那样,您在软件开发上花费的时间仅受您的想象力和您想要提供的功能数量的限制。当然,当针对特定会议时,可能会有时间限制。
现在是考虑印刷电路开发阶段的好时机,因为制造交付时间可能为25到30天或更长。幸运的是,我们可以在生产过程中的这些长时间延迟期间继续编写和调整代码。
CAD设计阶段
计算机辅助设计是使用计算机来帮助创建、修改、分析或优化设计。该软件用于提高设计师的生产力,提高设计质量,通过文档改善沟通,并为制造创建数据库。(维基百科)
有相当多的CAD软件可供选择。许多是免费的,许多是昂贵的,许多介于两者之间。此外,许多CAD软件系统针对特定应用,如建筑/房屋建设和平面布局、3D建模、印刷电路板设计和制造等。当然,我们对PCB设计软件感兴趣,这里也有丰富的选择(Altium、Altium 365、Autodesk Fusion 360、Autodesk EAGLE、KiCad EDA、Ansys RedHawk、EasyEDA等)。早在80年代中期,我尝试过一个名为Orcad的软件包,该软件包至今仍然存在。
去年,我下载了Autodesk EAGLE的免费版本,并开始学习他们的CAD设计软件。我学习EAGLE内部运作的第一个项目是Simon游戏的通孔版本(无表面贴装组件)。尽管这是一个缓慢的过程(边学边用EAGLE),我成功创建了原理图、板布局和布线。与所有优秀的CAD软件一样,只需单击一下按钮,我就能够生成Gerber文件、钻孔文件、BOM(材料清单)文件和拾放文件(拾放SMT组件)。这些文件是构建和组装成品PCB产品的PCB制造公司所需的。
就我的实验性“学习EAGLE”印刷电路板而言,制造厂没有进行组装。我选择使用通孔而不是表面贴装组件(便于组装),并订购了5块没有组件组装的板。总成本仅为30美元,制造构建交付时间仅为4到5天。当我收到板时,我手工焊接了组件,并很快验证了其按预期运行。
2021 CyMon游戏
我使用EAGLE软件的经历是值得的,但实际上花了我几周时间来完成这个相当简单的设计。我最大的障碍之一是学习如何遍历浩瀚的库海洋以找到适合我应用的正确组件。我只能想象如果我采用低剖面表面贴装设备(SMD)技术方法会有多困难。此外,学习各种EAGLE命令工具也花了相当多的时间。话虽如此,我相信随着投入更多时间,以及新项目的出现,设计过程将变得更容易,完成时间也会更好。
这提出了一个值得考虑的重要点。当硬件徽章针对特定会议并且需要满足紧迫的截止日期时,我觉得将CAD设计工作外包给有能力的专业人士可能是更好的选择。这就是我的第一个会议硬件徽章(CyMon)的情况,也是本文的重点。我担心重新上手使用EAGLE所需的时间,因为我已经将近一年没有使用它了。此外,我想在这个版本中使用低剖面表面贴装设备,这意味着要搜索新的库。更复杂的是,我们谈论的是800块PCB的订单,这完全排除了任何手动组装组件的可能性。
幸运的是,一位同事(我儿子)建议我查看一个名为https://fiverr.com的网站,那里有许多不同领域的专业人士提供服务并与他人竞争您的业务。就我而言,我搜索了PCB设计师并联系了其中一些人。最后,我得到了80美元的报价,包括2次修订和2天内交付Gerber、拾放和BOM文件。考虑到我面临的紧迫会议截止日期,这似乎是显而易见的的选择。
雇佣一位基于巴基斯坦的PCB设计师(我在FIVERR网站上找到的),我在2天内如约拿到了PCB制造文件。为了实现这一点,我必须向他提供粗略的原理图(甚至可以用纸和笔画)。下图说明了我用Microsoft Paint创建并提供给我的设计师的内容。
印刷电路板制造阶段
有了我的Gerber压缩文件、BOM和PnP文件,是时候联系我当时最喜欢的PCB制造商,中国的PCBWay了。一年前,我在简单的通孔CyMon板上使用了这家制造厂,并且已经熟悉了他们的要求和定价。当然,我知道这个订单的交付时间和价格会更高,因为我使用的是低剖面SMD组件,并且他们将进行“拾放”组装。与我以前的PCB订单(仅板)不同,这个PCB订单将是一个两步过程。首先,他们将制造PCB(4到5天的交付时间),然后他们将组装组件(25到30天的交付时间)。同样,将涉及两个成本。
额外提示:而不是选择普通的紫色板,我发现我可以为我的焊罩(涂在印刷电路板铜迹线上的薄漆状聚合物层,用于防止氧化和防止焊桥)选择各种颜色。这允许我将板“涂”成黑色,并在板上放置我选择的白色丝网图像。
硬件徽章到手 — 测试阶段
所以,一个月后,手上有五个原型,是时候给板通电并观看魔法了!警告:不要这样做!!!不幸的是,我做了那件事,而且不是一次,而是两次!我艰难地发现PCBWay安装了一批来自泰国的处理器,这些处理器标记不正确(引脚1指定标记在设备的错误角落)。尽管这是一种非常罕见的情况,但确实发生过这种情况,特别是与克隆仿制品有关。Microchip/Atmel不承认ATMega328P-UTH为有效的认证部件,但我们在许多产品中看到该部件,包括Arduino的Pro Micro和Pro Mini生产板。
正如我在本文很早之前所述,“如果接线不正确,有源组件可能会严重损坏。”由于微处理器(有源组件)由于错误的引脚1标记而放置方向错误,给板供电将Vcc电压施加在错误的引脚上,并永久损坏了设备。认为这可能是开箱即有的缺陷板,我尝试了第二块板,并获得了相同的结果。所以,在这一点上,我拿出万用表,开始检查点对点连接的连续性。特别是,我检查了黄色、蓝色、红色和绿色LED与D10、D11、D12和D13之间的连续性(参见上面的原理图)。一段时间后,我发现D10 – D13焊盘与ATMega328P引脚图中的引脚编号不对齐。然后我确定,如果我们抬起芯片并逆时针旋转一圈,它将正确对齐。
有两块板可能损坏,剩下三块可能可以挽救。使用热风枪,另一位同事(Rick Wisser)移除了处理器,清洁了焊盘区域,并放置了芯片(逆时针旋转一圈)。这次,当通电时,OLED显示屏通电,我们顺利运行。有了三个工作单元,下一步是通过上传软件对这些板进行编程以进行功能测试。
宝贵的经验教训
始终对原型PCB进行快速连续性检查,特别是关于有源组件。在首次给板通电之前进行此操作!不幸的是,我们现在需要第二批次的原型,并且必须再次进行设计和制造过程(再等30天)以确保正确的方向。在与我的设计师交谈并试图理解这种罕见的芯片方向问题是如何发生的之后,我了解到还有各种不同封装的设备(引脚1左上角、引脚1左下角等)。在这种情况下,我们必须始终确保验证引脚1的正确位置,以确保它与我们在设计阶段创建的板布局一致。注意:据我回忆,制造商(PCBWAY)确实通过电子邮件联系我们,要求我们验证引脚1的位置以确保处理器的正确放置。设计师确认了左上角(显然对于该特定封装是不正确的)。
经过两批原型PCB的运输,并验证了编程的板按预期工作,我们现在准备下800块PCB的大订单。
不幸的是,这导致了另一个宝贵的教训。在选择板组件时,我们必须始终确保制造厂有足够的库存数量。在我们的案例中,我们板的一个关键组件现在在制造厂显示为“缺货”。我们现在有三个选择:将组件更换为兼容设备,从第三方来源(如Mouser、Digikey等)提供我们自己的零件,或DNP(不放置)该组件。在我们的案例中,没有兼容我们零件的组件,在检查了许多本地供应商后,我们很快发现所有主要分销商也都缺货,并且背订单一直排到明年。意识到这一点,我们决定暂停下订单,并暂时搁置该项目。
交付时间可能造成伤害
在整个硬件徽章项目中,有些事情变得非常清楚。我很快意识到,在开发的各个阶段,我发现自己都在等待交付。我等待我的CAD设计师交付BOM、Gerber和拾放文件(一次几天)。更重要的是,我等待我的PCB制造商(制造厂)在中国,平均一个月才能收到完全组装的零件。此外,经常有来自巴基斯坦和中国的电子邮件消息,要求提供有关出现的问题的进一步信息。由于时区差异,这些会导致额外1或2天的延迟。
展望未来,很明显,如果我想加快进程,我需要解决这些耗时的障碍。这促使我重新学习CAD软件,以消除外包设计工作的需要。这不仅会降低成本,还会消除与我在巴基斯坦的设计师通信和等待文件到手的延迟。此外,通过控制设计过程,我将处于更好的位置来正确回答可能出现的许多问题。
幸运的是,我遇到了一个非常用户友好(且免费!)的CAD设计软件包,名为EasyEDA。多亏了我之前使用Eagle(现以Fusion 360出售)的经验,我很快上手了EasyEDA。很快,我设计了半打“练习”板(使用低剖面SMT组件)并验证了它们的正确功能。此外,与我的EasyEDA发现相关,我找到了另一家PCB制造商(JLCPCB),能够在其他制造商一半的时间内构建和组装我的板。自己做设计工作意味着一个耗时的障碍现在不再是问题!
解决与使用中国制造厂相关的交付时间将更具挑战性。值得再次说明的是,构建PCB实际上有两个交付时间。第一个交付时间通常为3到5天,涉及构建裸印刷电路板,包括铜布线、丝网印刷、焊罩等(无组件组装)。第二个,也是更大的交付时间,通常为25到30天,涉及手工焊接任何通孔组件,并使用专用设备拾放所有SMD(表面贴装设备)。显然,如果我们能自己进行组装,将节省大量时间,更不用说节省大量成本(组装通常占PCB制造总成本的75%)。
什么是拾放机器?
顾名思义,拾放(PNP)机器是一种自动化机器人机器,用于拾取和放置或定位PCB上的SMD组件。它使用真空从胶带上拾取组件,将其旋转到正确的方向,并精确地放置在电路板上。这是在专用软件的控制下,与我们提供的PnP文件一起完成的。设置机器以构建组装可能需要一些时间,但一旦一切启动并运行,它可以非常快速地组装