Raspberry 树莓派 CM4模块的底板设计注意事项

1, 树莓派CM4底板设计

 树莓派CM4模块集成了CPU, 存储器,以太网, 无线模块,电源等等, 大大降低了硬件设计的要求。对我们使用树莓派提供了很好的便利性。
本人近期因为项目的需要设计了一款CM4的底板, 先上图: 

该板子的特性主要包含: 
1, 提供2个USB接口,一个USB2.0 device, 一个USB3.0 host
2,板子集成有一个4口的百兆以太网交换芯片。其中对外提供一个RJ45连接器接口, 一个连接CM4, 另外两个用来级联设备。
3,板子左右两端提供级联板卡。多个板子可以通过串行的方式连接 。理论上只要电源功率足够,可以无限个板卡连接。
4,板子提供UI接口, 可以外接MIPI DSI 显示屏+触摸屏。

2,参考设计

树莓派官方提供了CM4模块的底板参考设计

https://www.raspberrypi.com/products/compute-module-4-io-board/
其中大部分设计都可以直接拿来使用。
但是在独特的个人项目设计时,难免会碰到各种各样的问题,以下是本人总结的一些注意事项。

3, 原理图设计的注意事项

3.1 原理图设计中碰到第一个事情是如何对CM4连接器进行标示。 如图, 在官方IO板子中,它是直接将CM4作为一个完整的个体来看待的,即CM4模块相当于我们设计使用中的任何一款芯片。它有400个引脚,每一个引脚都有自己的信号名称,例如102号管脚为PCIe_CLK_nREQ。如果我们直接制作一个CM4的原理图符号库,并在设计中使用它,那么在完成设计后导出的器件清单BOM中,将只有CM4模块的信息,而丢失了连接器本身的信息。

感兴趣的读者可以自己试一下导出官方IO板的BOM。

下图是本人导出官方IO板子的BOM表:它只包含了CM4,而没有包含连接器DF40C-100DS-0.4V。

为了防止在BOM中遗失连接器的信息,本人采用的方法是在原理图中使用连接器符号库而不是CM4符号库。
为了方便对比,我把两个图片并排显示: 

在我的设计中, 我直接创建的是DF40C-100DS-0.4V的符号库。请注意库中的管脚名称直接是数字,而不是功能名称。如管脚2, 它的名字也是2, 而不是PCIe_CLK_nREQ。因为我创建的DF40C-100DS-0.4V的符号库也可以使用在其他的项目原理图中,所以名称不能固定为CM4的信号名。你可能会注意到,在上图中我使用了M1来代表CM4模块本身。这样在到导出的BOM中将同时包含CM4和连接器的信息。
可能有的读者觉得上面的讨论不是一个很大的问题。因为这个完全可以通过手动在BOM中添加连接器的信息。这是建立在BOM表不经常更新的前提下。如果BOM表还没有固定的情形下, 漏掉连接器的信息的可能性是非常大的。
另外一个直接使用CM库符号的缺点是,在焊接PCB的时候,PCB只有CM4的位置信息而没有连接器的位置信息。

当然我的方法也有不好的方面,那就是在原理图设计的时候,需要仔细比对每一个管脚的信号名称,同时在PCB设计的时候,如果连接器的位置需要调整,则要非常小心,确保两个连接器同时移动。

这个问题类似于硬件设计中如何在BOM中添加线缆, 端子插头等等不在PCB上的器件。
对于这个问题,我在先前的博客中也有说明。 感兴趣的读者可以看看以下链接。
https://blog.csdn.net/dylanZheng/article/details/110304051

3.2 注意以太网信号的正负极, TRD1 和 TRD1信号对名称是上 _P 下 _N,TRD0和TRD2信号对名称是上_N下_P。虽然以太网信号线正负极能够自适应,但是按照正常的顺序总归更符合设计要求。

3.3 CM4 IO官方板子中将所有的GPIO直接通过GPIO数来命名信号。在自己的设计中可以命名的时候更具体一点。 如GPIO5 UART3 RXD,让原理图更容易阅读。

3.4 管脚78 GPIO_VRE 用来设定CM4 的GPIO电平,可以直接外接3.3V或者1.8V。但是最好串联一个0欧电阻,方便万一需要更改。

3.5 CM4 管脚84和86提供3.3V的电压输出,但是最大电流600mA, 使用它们给外部电路供电的时候,需要仔细计算功耗。

3.6 管脚57,61, 62, 63, 64, 67, 68, 69, 70,72, 75提供的SD卡信号在带有emmc模块的CM4上已经被使用(链接到了eMMC)。所以如果需要外接SD卡的话,需要另外选择其他GPIO功能管脚。例如可以使用GPIO22~27

3.7 CM4模块上自带的ethernet Phy是BCM54210,没有找到它是否支持capacitive coupling的连接方式。它和交换芯片的连接保持使用变压器的方式。

4,PCB设计的注意事项

CM4模块已经高度集成化,常见的DD接口,千兆以太网接口等已经不需要我们考虑。 CPU的电源,以及CPU上电顺序等等比较耗费时间,需要仔细设计的部分也已经集成好,不需要我们再考虑。所以CM的底板的PCB设计其实是相当简单的了。 需要注意的事项也不多,这里列举几个我个人决定比较重要的。

4.1 在设计PCB板之前,需要注意CM4模块的高度。连接器DF40C-100DS-0.4V的Stacking Height 只有1.5mm。所以最好不要在CM4模块底下放置任何的元器件。 电容电阻最好也不要放。一个标准的0603封装的电阻高度大约0.45mm。 原则上是可以放置的,但是请注意CM4模块本身底层也有焊接元器件。下图是官方底板PCB,可以看到CM4模块下除了一个电阻,没有其他任何元器件。

如果PCB布局受限,则可以采用更高的连接器DF40HC(3.0)-100DS-0.4v. 它的Stacking Height 是3mm,所以此时在CM4模块下面放置不高于1.5mm的元器件是安全的。

如果需要放置更高的器件,则需要导入CM4的3D模型,进行精确位置对比查看。这要求能用机械工程软件或者请机械工程师帮忙查看

4.2 CM4上的无线模块天线对应着的PCB区域,需要放置keep out区域。
如下图的绿色方块区域所示

4.3 阻抗设定.
CM4对于高速差分信号有阻抗的要求。摄像头,DSI,以太网以及HDMI要求100 ohm差分阻抗,而PCIe,USB则需要90 ohm的差分阻抗。具体的阻抗与PCB厚度,材质,线宽,线距等等有很大关系。一般来讲都是需要先联系PCB制造商。根据阻抗要求,制造商一般都会提供推荐的叠层结构以及线宽线距的设定。
以下是我根据自己的需求,在某一个PCB制造商的网站上得到的设定:


网站上提供了好几种PCB材质,一般我们选择的原则是L1和L2层间距比较小的(L3和L4同样间距比较小的),因为L1是信号走线层而L2是参考地层,他们的间距比较小,对EMC有好处。

4.4 信号线长度匹配.

除了阻抗匹配,上述信号线还需要进行长度匹配。 需要注意的是, 在计算上述信号长度的时候,需要考虑到CM4上信号长度的差异。
在CM4的手册的4.1章节, 例举了信号长度的差异:


为了使得最终的长度相等, 本人使用excel表格计算了底板上信号的走线长度: 

4.5 5V信号的宽度
CM4由5V供电, 它的功耗要求是7W,最高可能达到9W,因此,5V信号的最大电流可以达到1.8A. 所以5V信号的宽度至少要0.9mm(1oz的铜皮),最好能够1.2mm以上。 作为参考,官方底板的5V信号宽度是3mm

…………………………………完……………………………………………………………

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端开发(十八)-- 使用JAXB,将JavaBean转换XML文本

下面是测试时的运行环境: 1.jdk8 2.Maven,可能需要需要的依赖,如下: <dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><gr…

【一起来学kubernetes】30、k8s的java sdk怎么用

Kubernetes Java SDK 是开发者在 Java 应用中与 Kubernetes 集群交互的核心工具&#xff0c;支持资源管理、服务发现、配置操作等功能。 一、主流 Java SDK 对比与选择 官方 client-java 库 特点&#xff1a;由 Kubernetes 社区维护&#xff0c;API 与 Kubernetes 原生对象严格…

PHP开发者2025生存指南

PHP&#xff0c;这个曾经被戏称为“世界上最好的语言”的脚本语言&#xff0c;依旧在网络世界占据着重要的地位。然而&#xff0c;技术发展日新月异&#xff0c;面向2025年&#xff0c;PHP开发者要想保持竞争力甚至实现职业生涯的飞跃&#xff0c;需要不断学习和提升自身技能。…

MySQL与Redis数据一致性保障方案详解

前言 在现代分布式系统中&#xff0c;MySQL和Redis的结合使用非常普遍。MySQL作为关系型数据库负责持久化存储&#xff0c;而Redis则作为高性能缓存层提升系统的响应速度。然而&#xff0c;在这种架构下&#xff0c;如何保证MySQL与Redis之间的数据一致性是一个重要的挑战。本…

MySQL响应慢是否由堵塞或死锁引起?

目录标题 **1. 检查当前运行的查询和进程****2. 查看死锁日志****方法一&#xff1a;通过错误日志****方法二&#xff1a;通过InnoDB状态** **3. 检查锁信息****查看表锁****查看行锁&#xff08;InnoDB&#xff09;** **4. 分析慢查询****开启慢查询日志****分析慢查询** **5.…

【计算机网络】记录一次校园网无法上网的解决方法

问题现象 环境&#xff1a;实训室教室内时间&#xff1a;近期突然出现 &#xff08;推测是学校在施工&#xff0c;部分设备可能出现问题&#xff09;症状&#xff1a; 连接校园网 SWXY-WIFI 后&#xff1a; 连接速度极慢偶发无 IP 分配&#xff08;DHCP 失败&#xff09;即使分…

JavaScript函数式编程思想

1. 相关面试题 1.1. 什么是纯函数&#xff1f; 纯函数是一种函数&#xff0c;其返回值仅由其输入参数决定&#xff0c;不产生任何可观察的副作用&#xff0c;如修改全局对象或外部状态。 纯函数具有以下特性&#xff1a; 1. 确定性&#xff1a;相同的输入永远得到相同的输…

Elasticsearch安全与权限控制指南

在Elasticsearch维护中&#xff0c;安全管理是保障数据合规性和集群稳定性的关键。本文将详细介绍用户与角色管理、索引/字段级权限控制、HTTPS加密通信、审计日志与合规性检查等核心安全实践&#xff0c;希望可以帮助你构建更安全的Elasticsearch环境。 1 用户与角色管理 1.1…

『VUE』快速入门配置环境使用tailwind css 记忆tailwind css常见规则 (详细图文注释)

目录 效果预览快速入门环境配置配置 tailwind.config.js 设置文件添加 Tailwind 的基础样式引入样式到项目检查构建工具配置测试 Tailwind CSS 效果 使用插件tailwind.config.js的最终内容app.vue演示 为什么不需要记忆 Tailwind 的类名&#xff1f;1. 类名直观2. 文档全面3. 工…

StdioIterator

参考这种用法&#xff1a; int a[3]{1,2,3}; copy(a,a3,ostream_iterator<int>(cout," ")); 以及 ostream_iterator 类 | Microsoft Learn 中的函数签名&#xff0c;可以编写出 StdioIterator&#xff0c;同样支持 copy 函数的调用。 #include <stdio.h&…

制作service列表并打印出来

制作service列表并打印出来 在Linux中&#xff0c;服务&#xff08;Service&#xff09;是指常驻在内存中的进程&#xff0c;这些进程通常监听某个端口&#xff0c;等待其他程序的请求。服务也被称为守护进程&#xff08;Daemon&#xff09;&#xff0c;它们提供了系统所需的各…

CKS认证 | Day3 K8s容器运行环境安全加固

一、最小特权原则&#xff08;POLP&#xff09; 1&#xff09;最小特权原则 (Principle of least privilege&#xff0c;POLP) &#xff1a; 是一种信息安全概念&#xff0c;即为用户提供执行其工作职责所需的最 小权限等级或许可。 最小特权原则被广泛认为是网络安全的最佳实…

Linux wifi 驱动移植适配流程详解

基础内容概要 将tplink wn725n 无线网卡驱动移植到ubuntu将tplink wn725n 无线网卡驱动移植到Linux开发板&#xff08;交叉编译&#xff09;将tplink wn725n 无线网卡驱动移植到Linux开发板&#xff0c;在开发板中编译 为什么还要包涵交叉编译&#xff1f; 目标设备是ARM架构…

Day14 动态规划(3)

一.746. 使用最小花费爬楼梯 FS记忆化搜索优化: const int N 1010;class Solution { public:int mem[N];int dfs(vector<int>& cost, int x){if(mem[x]) return mem[x];int sum 0;if(x 0 || x 1) return 0;else{sum min(dfs(cost, x - 1) cost[x - 1], dfs(c…

解锁AI潜能:模型上下文协议(MCP)的革新与应用

解锁AI潜能:模型上下文协议(MCP)的革新与应用 在人工智能发展的当下,大语言模型(LLM)正逐步渗透到各个领域。从智能客服快速响应客户咨询,到智能编程助手协助开发者高效编写代码,LLM展现出强大的能力。然而,随着应用的深入会面临一个问题:模型与数据之间的连接困境。…

windows与ubuntu双硬盘双系统安装及启动(全流程成功)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; windows与ubuntu双硬盘双系统安装及启动&#xff08;全流程成…

【学习笔记】计算机网络(六)

第6章应用层 文章目录 第6章应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器域名服务器的分区管理DNS 域名服务器的层次结构域名服务器的可靠性域名解析过程-两种查询方式DNS 高速缓存机制 6.2 文件传送协议6.2.1 FTP 概述6.2.2 FTP 的基本工作…

Python扩展知识详解:lambda函数

目录 前言 1 基本知识点 语法 特点 代码示例 2 常见使用场景 1. 与高阶函数配合使用 2. 作为排序键来使用 3. 立即调用函数 4. 在字典中使用 3 高级用法&#xff08;进阶版&#xff09; 1. 多参数lambda 2. 设置默认参数 3. 嵌套lambda 注意事项 何时…

Android: Fragment 的使用指南

Android 中 Fragment 的使用指南 Fragment 是 Android 应用开发中的重要组件&#xff0c;它代表 Activity 中的一部分 UI 或行为&#xff0c;可以组合多个 Fragment 在一个 Activity 中构建多窗格 UI&#xff0c;并在不同 Activity 中重复使用某个 Fragment。 基本概念 Frag…

Vue React

Vue 的源码主要分为以下几个部分&#xff1a; 主要涉及 响应式、虚拟 DOM、组件系统、编译器、运行时。 ├── packages/ │ ├── compiler-core/ # 编译器核心 │ ├── compiler-sfc/ # 处理 .vue 单文件组件 │ ├── compiler-dom/ # 处理 DOM 相关…