# 教程总述
**对于高速电路设计一直比较感兴趣,想自己做一个XX派,但苦于资料太少了。** 过去6个月在摸索中完成了全志H6开发板。相信肯定也会有其他小伙伴有类似的想法,因此就有了这样一个《从零入门ARM高速电路设计》教程。
**本教程,将给出一个可行的学习路径**,分享我自己在做的过程中的一些经验(看别人似乎挺容易的,但自己操作起来怎么那么难,eg. BGA焊接),以及设计过程中的一些考量。
考虑到高速电路设计本身就是一个复杂的领域,包含原理图设计,PCB设计,焊接和调试,软硬件联调等步骤,涉及了硬件工程师,PCB工程师,嵌入式软件工程师等岗位,很难由一个教程就将知识完全涵盖。**对于网络上面讲得比较好的内容,我会给出资源地址,推荐大家去读原文。对于缺乏的内容,我会补充自己的知识和经验。**
我作为高速电路设计的初学者,肯定有知识和经验上面的不足,要是有错误或者资料的补充,欢迎在评论区指出和补充。**大家可以一起完善这个教程。**
项目主页:[https://oshwhub.com/logicworld/h6_board](https://oshwhub.com/logicworld/h6_board)
# 项目需求和设计
## 项目需求
和一般的项目不同,本项目包含了两个方面的需求,除了真的作为产品的需求以外,还有学习的目的。
### 产品需求
* **作为一个XX派的替代产品,可以完成类似的功能**
* 一台小型的 Linux 桌面计算机,可以实现文件编辑,上网,学习编程,视频播放等;
* 一台小型的 Linux 网络服务器,可以实现NAS,软路由,智能家居主控等;
* 一台性能强劲的MCU,可以通过GPIO直接控制外部硬件;
* 支持系统:Ubuntu等常见系统;
* 系统性能:支持运行GUI系统,可以跑浏览器,比如:2GB内存,8GB存储;
* 支持接口:USB,HDMI,音频接口,WIFI,SD卡等常见接口;
### 学习的目的
* **主控芯片必须要能够方便找到资料,方便买到物料**,否则,作为初学者可能根本做不下去;
* **主控芯片需要外接DDR内存**,是否外接DDR内存是区分低速还是高速重要的元素,也是高速电路中的核心难点;除去射频,高速通信的板子以外,DDR电路就是高速电路里面最难的部分,只要解决了这个部分就算入门了;
* **尽可能将功能做全**,将接口都引出来,这样可以学习各个电路的设计;大不了有一部分电路没调通,就算了;
* **简化设计**,一开始就做得很复杂,容易翻车,比如:板子正反面都贴器件,且布局很紧凑的话,可能会出现布线布不下去的情况;
* **控制成本**,包括PCB打样,SMT,物料,焊接工具等;初学容易做失败,可能会做多次,成本太高钱包受不了;
## 设计方案
### 主控芯片的选择
设计方案中最重要的就是主控芯片的选择。主控芯片一定,产品需求的满足程度,项目的原理图基本一半甚至更多,以及项目的难度和成本都基本确定了。下面主要谈谈我在选择主控时的一些考虑,重要性从高到低排序:
* **资料的齐全程度:这个是最最重要的因素,没有之一;**
* 重要性:
* 没有或者缺少厂家的软硬件资料,会导致根本没有办法做,巧妇难为无米之炊。对于初学者的难度就更加显著了。
* 厂家的设计资料算是一个比较权威的知识来源,可以学习他们的电路/PCB设计思路和经验。
* 内容:
* 硬件资料:
* **标案:原厂给出的参考设计(包括原理图和PCB)**,一般经过原厂测试,应该是比较靠谱的。一般原理图都会给,但是,PCB不一定有。极端情况下只有原理图也是可以设计的,只是对于初学者而言,缺了PCB会比较困难,比较容易出现自己搞不下去了想看看别人是怎么搞的。**因此还是很希望可以有原理图+PCB设计。** 如果实在找不到,可以使用开源社区的PCB设计,只是设计水平良莠不齐,比如:会出现阻抗线没有参考平面。
* **DDR模板**:刚刚提到DDR是高速电路中的核心难点,厂家为了让客户方便的设计PCB,会提供已经验证了的DDR部分原理图和PCB设计,让客户直接抄过去直接使用,不用从零开始画。一般就算不给标案的PCB设计,也会给DDR模板。虽然说是DDR模板,基本包含了完整电路的一半。这个部分的PCB设计也是非常重要的参考,**可以作为标案PCB的下位替代品**。
* **硬件设计指南**:厂家给出的原理图设计和PCB设计注意事项,可以学习设计知识,可以找个别的芯片指南看看也大差不差。
* **硬件调试指南**:厂家给出的调试指南,可以学习调试流程,可以找个别的芯片指南看看也大差不差。
* 软件资料:SDK资料,原厂移植的系统(eg. UBoot, Linux内核,Android)
* 如果,要自己玩软件系统的话,这个必不可少;如果,你找的芯片有公司做成了XX派,他们会提供这个部分。
* IC数据手册:主控芯片数据手册,配套的PMIC(电源管理IC)数据手册;
* 对于硬件设计极端情况下可以不要,可直接硬抄原理图;相对还容易找一些;如果,你找的芯片有公司做成了XX派,他们会提供这个部分。
* 工具:eg. 烧写工具(PhoenixSuit),DDR测试工具(DragonHD);
* 必需的部分,可能可以在网上找到下载;如果,你找的芯片有公司做成了XX派,他们会提供烧写工具。
* 来源:
* 原厂或经销商:最正规的来源,但是,硬件设计这个领域挺封闭的,RK和全志的官网光秃秃的啥资料也没有。估计我们这些业余爱好者应该也要不到吧。
* 网上散落的资料:
* [吴川斌的博客](https://www.mr-wu.cn/blog/):**关注即可下载,目前我找到的最方便的地方**,有一部分常见的芯片,比如:全志H6,H3,H616,瑞芯微RK3399,RK3588,RK3288。
* [CSDN下载](https://download.csdn.net/):东西挺多的,就是下载需要积分,内容需要自己判断。积分下载问题,淘宝搜csdn下载,几毛钱就可以解决。
* 其他站点:下载需要积分,暂时搞不定。
* 公开出售的开发板/XX派:一般提供原理图(一般没有PCB设计),软件镜像(可能也有源码),IC数据手册,烧写工具,软件系统使用指南;
* **主控芯片被用在了某款公开出售的开发板/XX派**:
* 除了原厂的标案以外,多了一个信息的参考来源。可以参考它的电路设计,元器件选型,布局。
* 可以直接使用它的软件镜像,先排除掉软件部分的复杂性,让我们先关注硬件部分的设计。
* 调试过程中可以拿他来做对拍,确认正常的系统是什么样子的,我们的板子是否正常。
* 既然主控芯片被某家公司使用了,相信这个应该也是一个不错的选择,比如:该有的功能应该都是有的,没有特别坑的地方。
* 可以看看[芯板坊](http://www.xinbanfang.com/)和[OrangePi](http://www.orangepi.cn/),看看他们都有卖什么样主控芯片的板子。芯板坊还专门做了[FindBoard](https://www.findboard.cn/#/home),可以按照各种条件搜索板子,这样就可以了解市面上都有哪些主控的板子,某一款芯片的流行程度。
* 其他
* 主控性能适中,难度适中:
* 性能太弱,跑不动GUI或者比较卡,可玩性也比较差,比如:NXP I.MX6ULL(这个芯片被用在了正点原子/野火的Linux开发板上面,后面如果想学Linux软件开发的话,也不失为一个比较好的选择);
* 性能太强,设计难度,物料成本都会比较高,比如:RK3588,RK3399;(RK3399也是一个非常著名的芯片,用在了好多开发板上面,想挑战一下的话,也是一个可以的选择)
* 比较适中的是H3,H6,H616,RK3288之类的;
* 主控芯片物料是否可以获得:一般情况下淘宝是可以买到散片的,但是,交易量基本都是个位数甚至0,得问问老板是否有货。
* 芯片的接口:一般来说,这类芯片基本上该有的接口都会有,其他高速接口(eg. PCIe)可能没有或者比较弱。如果,你想做特定应用的话,可能对接口会有特别的要求,比如:软路由对于网口数量有要求。
到目前选择主控芯片的考虑差不多就说完了,你可以去[FindBoard](https://www.findboard.cn/#/home),找找你心仪的主控芯片。
按照上面的标准,我找到了全志H6作为主控,主要是在[吴川斌的博客](https://www.mr-wu.cn/blog/)里面找到了比较详细的H6开发资料,其次OrangePi LTS 3也是以H6作为主控。
### 外围电路设计
**主控芯片确定之后,外围电路基本上水到渠成**,参考原厂标案和公开出售的开发板进行设计。希望有哪些接口,就把这些接口加上。出于学习的目的,多多益善吧。但是接口引出太多,设计难度也会增加,注意平衡。
对于我做的H6开发板,我并没有引出芯片上面所有接口,一方面对于我用不上的接口没有引出,比如:红外接收器(不太用得上),EPHY网口(家里没有网口,只有WIFI,因此没有引出),电视接口(TV CVBS,没有这样的电视接口),另一方面,有部分接口没有原理图参考,比如:PCIe,CSI。
### 简化设计和降低难度
作为初学者第一次做这样的板子,得从设计上面就得考虑进行一定的简化和降低难度,否则,很可能做到一半就发现做不下去了。以下是我在做的过程中遵循的几条原则:
* **尽量参考原厂标案或者公开出售的开发板进行设计,不要偏离他们的设计太远**,比如:
* 原理图设计时,没把握的地方尽量抄他们的,比如:滤波电容应该是偏多的,但是,我们第一次做经验不足,可能是吃不准哪些可以被去掉,从而精简设计;
* PCB设计时,布局走线可以仿照他们,以防布线布到一半走不下去的尴尬;
* 引脚定义也和他们一样,这样移植Linux系统时就会简单许多,减少软件上面的复杂性;
* 放松设计要求:
* **PCB板子的大小,可以比较大**,这样可以降低布局布线的难度;OrangePi 3 LTS大小是56mm * 85mm,我的板子是98mm * 98 mm,卡着JLC免费打板的最大尺寸。
* **板子层数,可以多一些**,H6原厂的标案是4层板,我做的是6层板,可以简化设计。(当然这里做6层的主要目的是为了JLC的免费打板条件,布线是可以压到4层的)
* **减少DDR片数**,4片DDR的难度远大于1片DDR的难度;我还看到只连16条DDR数据线,而不是32条数据线的[方案](https://oshwhub.com/gloomyghost/yuzukih616),也可以降低难度。目前我的设计就是采用了一片LPDDR3内存。
* **降低板子的器件兼容性**,比如:原厂的标案兼容eMMC和Nand Flash,兼容多款WIFI-BT芯片;我们可以固定一种芯片方案,我是选择了eMMC和AP6212 WIFI-BT芯片。
* **牺牲板子的速率**,比如:阻抗有偏差,3W要求不完全满足等等,具体可以到PCB章节再细说;
* **电阻电容的封装大小**:一般这些高速板都是0402的封装大小,如果,担心焊接能力有限的话,可以选择0603封装。我目前就是使用了0603封装,但是,对于布局和布线的难度会有所增加(这个到PCB章节的时候再细说)。
## 总结
以上就是《从零入门ARM高速电路设计》第一章,希望大家可以确定一款主控芯片,搜罗相关资料,对于外围的接口电路进行选择,为了简化设计考虑可以放松哪些设计要求,**基本形成开发板/产品的大致方案和整体研发思路**。