尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

RK3399 SBC扩展实战:40-pin GPIO与M.2接口选型配置指南

RK3399 SBC扩展实战:40-pin GPIO与M.2接口选型配置指南 RK3399这颗SoC在单板计算机圈子里算是老将了但直到今天市面上依然不断有搭载它的SBC新品出现。原因很简单双Cortex-A72加四Cortex-A53的六核架构放在千元级以下的开发板上性能依旧能打再加上原生PCIe 2.0控制器使得M.2接口可以真正跑高速设备而不是像很多入门级开发板那样只能走USB转接。而40-pin GPIO排针则保证了它跟树莓派外设生态的无缝衔接。这篇东西我打算从实际使用的角度把这个板子的两条扩展路线40-pin和M.2从选型、接线、配置到故障排查完整拆开讲一遍。不管是想拿它做NAS、软路由、边缘网关还是纯粹当Linux学习板这篇文章应该都能帮到你。1. 先看整体RK3399 SBC为什么到今天还有讨论度1.1 六核SoC在SBC里是什么段位RK3399是瑞芯微在2016年前后推出的一款旗舰级SoC用的是28nm HKMG工艺CPU部分是双核Cortex-A72加四核Cortex-A53的big.LITTLE架构。A72大核主频最高能到1.8GHzA53小核也能跑到1.4GHz。这个组合放在今天来看单核性能肯定比不过最新的ARM Cortex-A76/A78产品但在同价位开发板里它的多核并行能力依然相当能打。GPU是Mali-T860MP4视频解码支持4K VP9和H.265做播放器和轻度图像处理都没问题。关键是它的外围接口规格自带PCIe 2.0 x4控制器、双USB 3.0、双Type-C其中一个支持DP输出、原生千兆以太网、多路I2C/SPI/UART/PWM该有的差不多都齐了。对于SBC这类产品来说SoC本身的接口丰富程度直接决定了这个板子能干什么。同样是做NAS有些板子只能靠USB硬盘盒凑合而RK3399可以直接上M.2 NVMe SSD这个差距在长期使用中会非常明显。1.2 40-pin和M.2这两条扩展路线各自解决什么问题40-pin GPIO排针解决的是“控制”和“低速通信”的问题。它引出了I2C、SPI、UART、PWM、I2S这些总线你可以直接对接传感器、显示屏、步进电机驱动、CAN模块、继电器等等。这类外设对带宽要求不高但对时序、电平、复用关系很敏感属于物联网和嵌入式开发的传统艺能。由于RK3399板子大多兼容树莓派的40-pin物理布局所以很多现成的扩展板HAT都能直接插上去用省掉了飞线的麻烦。M.2接口解决的是“高速存储”和“高速通信”的问题。它把PCIe总线直接引到了插槽上你可以插NVMe SSD做系统盘或者仓库盘也可以插M.2 WiFi 6模块解决无线网络问题甚至某些板子还允许插4G/5G模块。相比之下SATA接口的上限摆在那里6Gbps而PCIe 2.0 x4的理论带宽可以达到2GB/s约16Gbps扩展空间完全不同。如果你是冲着高性能存储去的M.2基本是刚需。2. 40-pin扩展树莓派式GPIO的实战细节2.1 引脚布局与电平逻辑先别急着接线大多数RK3399 SBC的40-pin排针都是2x20阵脚物理间距2.54mm跟树莓派的排针位置保持一致。这样做的好处是市面上的T型扩展板、面包板转接板、甚至树莓派GPIO排线都能直接兼容。但是这里有个非常关键的问题物理布局兼容不等于电气定义完全一致。不同厂家的板子同一个物理引脚对应的SoC引脚可能完全不同尤其是I2C和SPI的编号以及UART是UART2还是UART4各家的处理不一样。所以拿到板子第一步不是找杜邦线而是去官网下载引脚定义图或者直接翻原理图。我之前见过一个案例有人拿树莓派的I2C传感器示例代码去跑一块RK3399板结果Pin3不是SDA折腾了一下午。这个坑不是技术难度问题而是信息核对问题一定不能省。电平方面RK3399的GPIO是3.3V逻辑电平跟树莓派一致。这意味着大部分3.3V传感器模块可以直接接但5V TTL电平的模块就必须加电平转换板。很多人会问40-pin上那几根5V电源脚能不能用来给外设供电答案是可以但要算电流。板上5V通常来自DC口或者USB Type-C供电经过板载稳压后直接引出负载能力取决于电源输入和板卡设计常见情况下建议单引脚不要拉超过500mA整板供电余量照着电源适配器的规格去算。2.2 常用外设怎么接I2C/SPI/UART/PWMI2C是接传感器最方便的总线SCL和SDA两根线就能搞定而且一条总线上可以挂多个设备通过设备地址区分。RK3399一般引出至少一路I2C到40-pin注意总线需要上拉电阻绝大多数模块板上已经集成但如果你是自己用面包板搭电路记得要加4.7k到10k的上拉电阻否则通信会时好时坏。建议先从I2C工具链入手Linux下用i2cdetect -l列出总线i2cdetect -y 总线号扫描设备地址能扫到基本就成功了一半。SPI适合高速数据采集比如LCD屏幕、ADC芯片、SD卡模块。RK3399的SPI速率可以跑到几十MHz但40-pin上引出的SPI通常只有一组片选如果你需要接多个SPI设备要么用片选扩展芯片要么手动把CS引脚接到普通GPIO上去控制这是嵌入式开发的常规操作。接线时注意MOSI、MISO、SCLK、CS四根线的对应关系不像I2C那样可以混。UART串口有两个典型用途第一是调试串口很多RK3399板子在40-pin上会引出调试串口接USB转TTL模块可以直接看到内核日志第二是接GPS模块、RS485模块、或者旧式工业设备。标准接法是TXD接对方RXD、RXD接对方TXD、GND接GND交叉连接。这里要特别提醒调试串口的波特率很多是1500000不是常见的115200如果连接后乱码先试试切换波特率。PWM用途主要是调光、控制舵机和电机转速。RK3399芯片本身有多路PWM输出但40-pin上引出的可能只有一路。PWM的频率和占空比都可以通过设备树配置Linux下用sysfs接口或者pwmchip设备操作。注意舵机的PWM周期一般是20ms占空比1ms到2ms对应0到180度直接用通用PWM控制器时一定先确认周期单位是纳秒还是微秒避免烧舵机。2.3 40-pin使用避坑记录第一不要用40-pin的5V引脚去给底板上的3.3V电路直接供电电平不匹配会烧器件。第二GPIO输入采集时如果信号来自12V或24V传感器输出必须先经过光耦或者电阻分压转换成3.3V很多PLC类设备输出电压就是24V直接接GPIO的结果就是“啪”。第三注意电流方向GPIO输出模式下单个引脚的灌电流和拉电流是有限制的一般不超过8到12mA别拿GPIO直接驱动继电器或者电机。第四40-pin上的MIPI-CSI、HDMI等显示相关引脚如果不用千万不要乱接这部分信号是高速差分接错会影响显示甚至损坏接口。3. M.2扩展从NVMe SSD到WiFi模块的选型与接通3.1 M.2 Key类型怎么看B/M/E Key别买错M.2接口看起来差不多实际上Key定义了它走什么信号。这是很多人第一次买M.2设备时最容易踩的坑。Key B的插槽缺口在右侧朝向金手指的方向常见于SATA SSD或者WWAN模块走的是SATA或者PCIe x2通道Key M的缺口在左侧最常见于NVMe SSD走PCIe x4Key E的缺口也在左侧但金手指只有一小段常用于WiFi/BT模块走PCIe x1或者USB 2.0。RK3399板载的PCIe 2.0 x4控制器在不同厂家板卡上引出的M.2 Key并不统一。有的板子做的是Key M为了插NVMe SSD有的板子做的是Key B为了兼容SATA SSD和WWAN甚至有些板子做的是Key E配合WiFi模块使用。更复杂的是有些板子虽然做的是Key M插槽但只引了PCIe x2通道传输速度会打折扣。所以下单之前一定要去看板卡的商品页或者原理图确认M.2插槽的Key类型和实际走线数量。买错Key的模块不仅插不进去硬插还可能顶断金手指。3.2 NVMe SSD vs SATA SSD在RK3399板上该怎么选如果M.2插槽走的是PCIe x4那插NVMe SSD的意义就很大。RK3399的PCIe是2.0规格每一lane的理论带宽是500MB/s左右x4理论带宽2GB/s实际顺序读取性能跑到1500到1800MB/s是正常的。这个速度做系统盘开机和软件加载都会非常跟手做NAS缓存盘也够用。如果插槽只引出PCIe x1或者x2情况又不一样。x1下NVMe SSD实际速度大约只有400多MB/s跟SATA III的550MB/s差不太多甚至不如SATA。这时候插NVMe SSD的意义就只剩下体积和随机读取性能了。所以我的一贯建议是先看插槽规格再决定买什么盘。如果板子M.2只走SATA协议那就老老实实买SATA接口的M.2 SSDB Key便宜又稳定别多花钱买NVMe。挑选SSD时还有一个细节值得关注部分NVMe SSD的主控发热量不小而RK3399板卡空间紧凑M.2插槽周围不一定有散热片安装孔。如果长时间跑高负载建议买低功耗盘或者自己加一块小尺寸铝合金散热片。注意SSD颗粒尽量选原厂三星、西数、铠侠、长江存储等杂牌盘在Linux下的兼容性有时候很折磨人会出现间歇性掉盘的问题。3.3 供电、散热与固定M.2不是插上就能跑M.2插槽的供电能力在不同板卡上差别很大。标准M.2插槽能提供3.3V供电但电流上限可能只有3A左右。一块NVMe SSD在峰值写入时功耗可能到6到8W如果同时板子还挂着两个USB 3.0设备加一个千兆网口满载工作整机电流压力不小。这里我要提醒一个很多人忽略的点RK3399 SBC虽然大多数用5V Type-C供电但也有不少板子用12V DC供电。如果你用的是12V供电板给M.2 SSD选一个稳定输出电流的电源适配器12V 2A以上是必须的如果是5V供电建议3A以上最好4A或更高。散热方面第一优先级是给RK3399芯片本体加散热片这个不用多说。第二优先级才是M.2 SSD因为SoC过热会触发降频速度全系崩盘SSD过热也会掉速但通常比SoC耐热。实际测试下来被动散热的铝片足够应对多数场景除非你要连续压测几个小时那就得考虑加个小风扇了。固定方面很多RK3399 SBC的M.2插槽旁边都有螺丝柱但未必配套螺丝规格买M.2模块时记得看包装里是否带固定螺丝或者铜柱螺母。4. 系统烧录与启动失败的排查实录4.1 烧录失败的高频原因电源、线材、驱动RK3399板子烧录系统主要用瑞芯微的RKDevToolWindows下或者upgrade_toolLinux下流程一般是安装驱动、进入Loader模式按住RECOVERY按钮再上电、选择固件、点击烧写。听起来简单但实际成功率往往受三个因素影响。第一个是电源。烧录过程中如果电压跌落很可能会在写eMMC或者SPI Flash时出错表现就是进度条卡在中间或者报“Device Not Found”。我自己的习惯是烧录时接上正常规格的电源适配器而不是只靠USB线供电。有些板子的Type-C口有PD协商如果供电电压没跟上负载一上来就掉线。第二个是线材。Type-C数据线看着都差不多实际上很多便宜线只能充电不能传数据或者插上后USB枚举不稳定。老办法用手机原装数据线或者品牌线比那些几块钱包邮的杂牌线可靠得多。第三个是驱动。Windows下Rockchip USB驱动如果没装好设备管理器里会看到一个黄色感叹号的设备这时候烧录工具根本识别不到重新装驱动、换USB口、卸载再扫描硬件变更这几个步骤走一遍基本能解决。4.2 启动卡住/重启循环的排查思路烧录完系统上电后如果卡在Logo或者反复重启不要急着怀疑固件坏了先按顺序排查。第一步检查电源是否足够。这个看似废话但很多“重启循环”其实是电压跌落触发的保护动作。RK3399满载功耗不低尤其是接了NVMe SSD之后瞬时电流需求更大。如果你用的适配器刚好卡在规格边缘很可能出现“进系统几秒就重启”的现象。第二步检查板子上的启动拨码开关或者跳线。RK3399开发板通常支持从eMMC、SD卡、SPI Flash、U盘启动如果板子的启动顺序被配置成优先SD卡而SD卡中又没有烧录系统那它就会不断尝试启动失败。第三步接上调试串口看日志。调试串口输出的U-Boot和内核日志能直接告诉你卡在哪一步是DDR初始化失败、找不到启动介质、还是内核panic。没有调试串口的话很多问题只能靠猜效率极低。4.3 一个真实排障案例说一个我印象很深的案例。一块RK3399板子客户反映“烧录成功但重启失败”。烧录工具显示100%完成但自动重启后黑屏串口无输出。我排查后发现烧录后eMMC的分区表出现了问题导致U-Boot找不到根文件系统。处理办法是在RKDevTool里先执行“擦除所有设备”然后再重新烧录。擦除操作会清掉eMMC里的所有分区和U-Boot环境变量相当于把盘彻底格式化一遍之后重新烧录问题就消失了。事后分析这个问题的根源大概率是旧固件里的U-Boot环境变量跟新固件不兼容或者烧录过程中写入顺序有交叉。所以我现在遇到“烧录后重启失败”第一反应不是怀疑固件包坏而是先彻底擦除再重烧一次。这个低成本操作能解决七八成的问题。另外如果你在用Linux下的upgrade_tool擦除命令是upgrade_tool ef 设备节点再重新写loader和固件效果一样。5. 选购建议与配置组合速查5.1 常见RK3399 SBC对比要点市面上主流的RK3399开发板有几家大厂但彼此之间的配置差异不小。选型时有几个关键参数要盯紧。第一个是内存大小一般有2GB和4GB两种版本。做桌面系统或者跑Docker多容器建议直接上4GB做轻量级网关、NAS2GB勉强够用但我不推荐因为多出来的开销很快会占满内存。第二个是存储介质有的板子板载eMMC有的板子只有TF卡槽eMMC的随机读写速度和稳定性远好于TF卡作为系统盘更靠谱。第三个是M.2插槽规格Key类型和PCIe通道数决定了你能插什么SSD这个前面已经详细说过。第四个是网络接口多数RK3399板子是千兆网口但有没有第二个网口、是不是PCIE转出的会直接影响你做软路由或者NAS的玩法。第五个是显示输出HDMI 2.0、DP、MIPI-DSI这些都是差异点想做桌面或者接屏幕的要注意。这里额外说一句RK3399属于寿命很长的平台很多板卡厂家会持续更新内核和Android/Linux BSP选型时优先选那些有活跃社区和固件更新记录的牌子后续维护会省心很多。5.2 不同用途的扩展组合建议做NAS4GB内存版本M.2插NVMe SSD做系统盘和缓存另外配一个USB 3.0硬盘盒或者SATA扩展板放机械硬盘。40-pin可以留出来以后接个温湿度传感器监控机房温度或者接个UPS通信线做断电自动关机。做软路由/网关双千兆网口是前提M.2插Intel或者Realtek的WiFi 6模块作为AP或者直接做有线主路由。40-pin可以接一个OLED屏幕显示实时流量或者接继电器做物理断网开关。注意这类应用对网络吞吐要求高如果M.2插槽和网卡共用PCIe通道带宽分配要提前规划。做桌面Linux主机4GB内存起步M.2 NVMe SSD当主盘HDMI或DP接显示器。40-pin接USB转接板意义不大但可以接一个GPIO按键作为自定义电源键或者接风扇调速PWM改善整机散热体验。做边缘计算/AI推理盒子RK3399的GPU和NPU能力有限更多是作为数据采集和预处理节点适合接摄像头传感器MIPI-CSI或USB摄像头40-pin接各种工业传感器M.2主要跑算法模型文件存储和日志落盘。这种场景下稳定性和散热优先级最高建议直接固定在导轨或金属外壳里利用外壳辅助散热。6. 最后再分享几个自己习惯的细节用RK3399 SBC这几年我自己养成了几个小习惯。第一个是首次上电不接任何外设先跑一遍内存测试和温度监控确认板卡本身稳定再开始接活。第二个是给每块板子都贴一个标签写上固件版本和烧录日期不然板子多了之后你根本分不清哪块跑的是哪个版本的内核排查问题的时候特别痛苦。第三个是常备一条好的调试串口线这个成本很低但关键时刻能救命。第四个是SSD分区时预留一部分不分配用来做系统备份和日志分区避免日志写满主分区导致系统崩溃。第五个是M.2 SSD的固定螺丝用磁吸螺丝刀慢慢拧M.2金手指非常脆弱偏一点点就可能弯针这个板子就废了。40-pin和M.2两条扩展路线基本上把一个SBC能玩的接口都覆盖了。RK3399作为一颗有些年头的芯片生态成熟、资料丰富踩坑的成本低确实适合拿来练手和落地。希望这篇东西能让你少走点弯路。
返回列表