ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

树莓派Model B+实测:从GPIO扩展到供电设计的全面升级

树莓派Model B+实测:从GPIO扩展到供电设计的全面升级 2014年夏天树莓派Model B发布的时候我手上那块初代Model B已经服役了大半年。说实话刚看到B的规格表我第一反应是——就这SoC还是BCM2835内存还是512MBCPU依然是那颗单核ARM11。但真正拿到板子插上电接上原来那块已经得靠胶带固定的SD卡套我很快就意识到B并不是一次敷衍的小改款。恰恰相反它把初代Model B上那些最让人窝火的问题几乎全部收拾了一遍。这篇文章就以我实际把玩和长期运行的经验视角把这块板子的核心细节、GPIO引脚变化、系统安装和踩坑实录完整过一遍希望对还在犹豫要不要翻出B重温、或者正打算把手头B重新利用起来的朋友有点帮助。1. 项目概述Model B到底解决了什么1.1 从Model B到Model B一次关键而克制的迭代树莓派Model B发布于2014年7月和初代Model B放在一起对比你一眼就能看出它没那么“实验室”了——边角圆润、接口排列更整齐、原来挤在板边的SD卡槽换成了Micro SD两个USB口变成了四个GPIO从26针扩成了40针。但这都不是最核心的最核心的是供电方案的回归。初代Model B用的是开关稳压器好处是转换效率高坏处是输出纹波大对敏感模拟电路和某些USB外设不太友好很多人的摄像头采集画面上会出现水波纹其实就是电源纹波在作祟。B改回了线性稳压器方案纹波明显小很多代价是输入电压的要求更严格官方直接建议5V/2A电源而不是初代时那种“5V/1A勉强也能跑”的糊弄态度。这个改动对普通用户来说感知不强但如果你像我一样用B挂传感器或者跑USB声卡就会感谢这个决定。1.2 哪些人适合这次升级从定位上看B是一次“把基础体验做扎实”的迭代。它没有追求更高的算力而是解决了初代B在存储卡槽可靠性、USB扩展能力、GPIO生态兼容性、功耗控制这几个维度的痛点。所以你适合拿它做这些事学习Linux基础和Shell操作拿一块低成本的板子练手坏了不心疼。跑轻量级服务比如内网DNS、Pi-hole、简单的HTTP服务、MQTT broker单核512MB完全够用。做GPIO实验接LED、按键、温湿度传感器、步进电机驱动板40针接口比26针宽裕太多。玩经典复古游戏模拟器配合低功耗运行比顶着风扇跑四核板子安静省心。如果你是冲着机器学习、桌面办公、视频编解码这类高性能需求去的那Model B确实不合适它不是那块料。但如果你想用最少的钱、最低的功耗构建一个靠谱的物联网边缘节点或者入门Linux实验环境B的性价比到现在依然不差二手市场三四十块钱就能拿下。2. 硬件规格与设计变化解析2.1 核心参数一览先把B的主要硬件参数摆出来方便对照项目参数SoCBroadcom BCM2835ARM11单核700MHz内存512MB SDRAM与GPU共享存储接口Micro SD卡槽支持SDHCUSB4个USB 2.0 Type-A接口由LAN9512芯片扩展以太网10/100MbpsRJ45与USB共用总线视频输出HDMI、复合视频3.5mm四极耳机口音频输出3.5mm模拟音频、HDMI数字音频GPIO40针含I2C、SPI、UART、PWM供电Micro USB官方建议5V/2A尺寸约85mm × 56mm × 17mm关键点在于这颗BCM2835和初代一模一样内存也依然是512MB。很多人不理解为什么叫“新”Model B却不升级CPU。其实原因很现实树莓派基金会当时的核心目标是兼容性优先。BCM2835上的Linux生态、GPU驱动、社区软件都经过了两年打磨如果贸然换SoC代价是大量软件要重新适配直接砍掉用户基数。B的使命是把外围体验补齐为下一代产品做好准备。2.2 为什么外观与布局值得关注B的尺寸其实和初代相差不大但布局优化得非常明显。USB接口从两个变四个并且和以太网口排列在板子的一侧配合带开口的亚克力外壳走线就清爽很多。原来的SD卡槽在板子底面插拔时极度别扭很多人直接弄丢卡卡簧。B改成Micro SD卡槽后卡口朝外指甲一顶就能换卡这个改动我愿称之为年度最实用的用户体验升级。另外B增加了不少散热过孔和安装孔位四角都留了标准的3mm固定孔。如果你给它加装散热片和外壳安装起来比初代方便很多。而且B的电源指示灯红色PWR旁边还保留了一个ACT绿灯用来指示SD卡活动状态排查系统启动问题时非常有用——如果绿灯不闪或者恒亮基本能判断卡没读好。2.3 性能与功耗的权衡单核ARM11跑到700MHz现在听起来确实不够看但在512MB内存的加持下跑一个命令行系统、Python后台服务、轻量数据库体验并没有想象中那么糟糕。功耗方面B空闲时整板电流大概在0.3A到0.5A之间满载也不会超过0.7A。配合一个旧的手机充电头你就能获得一块24小时在线的小服务器。这里有个实际权衡B的四核性能当然比初代B更强但代价是发热和功耗同步上升。B作为无风扇被动散热的板子长时间稳定挂机反而更适合低功耗设计。我有一块B放在弱电箱里跑了一年多环境温度最高到过35度也只是加了一小块铝散热片系统没有因为过热重启过。如果是树莓派3B或者4B同样的环境不加风扇几乎不可能稳定。3. GPIO与扩展生态详解3.1 40pin GPIO引脚图逐个看B最值得关注的变化之一就是GPIO从26针扩展到40针。前26针的定义和初代完全兼容也就是说你手里所有为初代Model B设计的扩展板插到B上依然能正常使用这极大降低了升级门槛。这40针里除了一堆电源和地引脚之外还有17个可用的GPIO通道外加I2C、SPI、UART等串行总线的复用引脚。我把最常用的几个引脚整理成一张速查表按BCM编码对照物理引脚物理引脚号BCM编号功能/复用说明1-3.3V给传感器小电流供电别超50mA2-5V给LCD屏、风扇等大电流外设供电3GPIO2I2C SDA板载1.8k上拉接I2C设备直接用5GPIO3I2C SCL同上8GPIO14UART TXD接串口模块时注意电平要3.3V10GPIO15UART RXD同上11GPIO17普通GPIO可作PWM输出12GPIO18普通GPIO/PWMLinux默认音频PWM口13GPIO27普通GPIOB新增引脚之一15GPIO22普通GPIO常用按键输入16GPIO23普通GPIO常用LED输出18GPIO24普通GPIO配合上拉电阻可做读数开关19GPIO10SPI MOSI接SPI设备的数据输入21GPIO9SPI MISO接SPI设备的数据输出23GPIO11SPI SCLKSPI时钟24GPIO8SPI CE0SPI片选026GPIO7SPI CE1SPI片选127GPIO0ID_SD用于HAT EEPROM识别别当普通GPIO用28GPIO1ID_SC同上这里要特别提醒物理引脚27和28是ID EEPROM的专用引脚名称为ID_SD和ID_SC它们不是给你接LED用的。虽然它们内部也能复用为GPIO0和GPIO1但如果你在这两个脚上接东西可能会干扰HAT识别逻辑甚至造成I2C地址冲突。我在一张第三方扩展板上踩过这个坑后来换用了别的引脚才恢复正常。3.2 HAT规范为什么这是B最被低估的改进B引入的最重量级规范不是40针本身而是基于这两个ID引脚实现的HATHardware Attached on Top检测机制。简单说真正的HAT扩展板会在板上带一颗EEPROM里面写入了板子的厂商信息、设备树Device Tree配置片段、GPIO映射规则。B启动时系统通过ID_SD和ID_SC两条引脚读取EEPROM自动加载对应的设备树覆盖文件让GPIO功能、驱动模块、引脚映射一次到位。这意味着什么以前用26针GPIO接扩展板你需要在配置文件里手动声明“这个引脚用作输入那个引脚输出PWM”一不小心就配错了重启还找不着原因。HAT规范把这一整套全部自动化了插上就能用系统自己认得你是谁。哪怕后来到了树莓派Compute Module 4那个时代40pin GPIO的引脚定义依然沿用B确立的这套标准HAT的电气规格和EEPROM协议也没有变。你在B上养成的GPIO习惯迁移到后续任何型号甚至算力模块上基本零成本。3.3 引脚复用与编程入口B的每个GPIO引脚通常带多个复用功能比如GPIO14/15既能做普通输入输出也能切换成UART串口GPIO2/3默认就是I2C总线的SDA/SCLGPIO7到GPIO11这一组则是SPI总线的CE1、CE0、MISO、MOSI、SCLK。你必须在程序中明确选择使用哪个功能不能同时又当GPIO又当串口用。我自己最常用的编程方式是用Python加RPi.GPIO库因为它封装简单、调试方便。一个最基础的LED闪烁程序是这样的import RPi.GPIO as GPIO import time LED_PIN 18 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) try: while True: GPIO.output(LED_PIN, GPIO.HIGH) time.sleep(1) GPIO.output(LED_PIN, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: GPIO.cleanup()这里有两个容易踩的坑一是setmode必须统一要么全程用BCM编号要么全程用BOARD物理引脚编号混着用代码表面上不报错但控制的是完全不同的引脚二是程序异常退出时不执行GPIO.cleanup()下次启动引脚电平可能停留在上次的状态导致外设出现“莫名其妙”的误动作。更稳妥的做法是把清理逻辑放到try/finally里或者用Context Manager的with语法。如果你更熟悉命令行Linux内核的sysfs接口也可以直接操作GPIO。写echo到/sys/class/gpio/export然后改direction和value属实有点绕但脚本调试的时候不用装任何额外库也算应急方案。现在的树莓派系统还内置了gpiozero库面向更高级的应用场景支持LED、Button、MotionSensor、Servo这类抽象对象适合刚入门的人快速做实验。4. 实操过程与核心环节实现4.1 选择合适的系统镜像B的SoC是ARMv6架构这一点相当关键。后面出的树莓派2、3、4都是ARMv7或ARMv8很多新版本的Raspberry Pi OS已经不再支持ARMv6了。所以给B装系统不能直接拿最新版镜像往里灌否则大概率卡在开机阶段。我的建议是去树莓派官方软件下载页面挑Raspberry Pi OSLegacy版本也可以选择专为ARMv6优化的Raspbian映像。如果你需要跑一些古老的依赖库甚至可以直接装2019年左右的旧版镜像在B上性能表现反而更好因为新版系统加入了不少图形界面优化启动内存占用更高在老硬件上有点吃力。选最小镜像还是满载镜像取决于你的场景。只跑命令行服务装Lite版就够了体积小、内存占用低。要接显示器当轻量桌面就选带桌面但不带推荐软件的版本省去在B上卸载一大堆用不上的办公套件的时间。4.2 烧录与首次启动烧录系统我推荐用Raspberry Pi Imager或者balenaEtcher两个都是图形化工具选好镜像、选对SD卡、点Write几分钟就完事。注意Micro SD卡尽量选8GB以上的Class 10卡B虽然对速度上限不高但劣质卡会导致系统写频繁报错。烧录完成后把卡插到B上接好HDMI显示器和网线最后插上Micro USB电源。首次启动时旧版Raspbian系统默认的用户名是pi默认密码是raspberry。现在新版Raspberry Pi OS改成了首次启动引导创建用户名但对B这类老硬件我建议还是用历史版本镜像按老流程走。登录系统后第一件事是执行sudo raspi-config这个配置工具里一定要做几件事扩展文件系统让SD卡剩余空间全部可用。在Interface Options里开启SSH方便后续远程操作。在Display Options里调整分辨率如果用的是老显示器不识别HDMI信号。修改默认密码避免局域网内被别人直接登录。做完之后重启B就算正式站起来了。4.3 基础远程操作与环境优化没有显示器完全靠SSH操作B也是常态。你只需要知道它的IP地址比如在路由器后台查或者用nmap扫一下局域网。然后ssh pi192.168.1.100登录之后建议把静态IP配好不然路由器一旦重启B的地址变了脚本和端口映射全得跟着改。修改/etc/dhcpcd.conf添加interface eth0 static ip_address192.168.1.100/24 static routers192.168.1.1 static domain_name_servers192.168.1.1对于跑服务的场景还有一个很重要的优化把GPU内存调低。默认GPU显存是64MB如果你完全不接显示器在/boot/config.txt里设置gpu_mem16这样系统可用内存从448MB变成496MB虽然只是几十MB的提升但跑Python服务的时候内存就是生命线。另外把swap的swappiness调低减少SD卡读写频率echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf4.4 外设接入实测把B变成小型服务器我拿B做的最稳定的一个项目是把它当作家里的轻量文件共享服务器。硬件上就三样B、一块移动硬盘、一根网线。先在B上安装Sambasudo apt update sudo apt install samba然后编辑/etc/samba/smb.conf在文件末尾添加一个共享目录配置[share] comment B shared folder path /home/pi/share browseable yes read only no guest ok no create mask 0644 directory mask 0755设置共享密码sudo smbpasswd -a pi之后重启Samba服务生效sudo systemctl restart smbd实测下来从电脑往B挂载的移动硬盘里拷贝大文件速度稳定在6-8MB/s左右。之所以达不到千兆传输的速度是因为B的以太网和USB共用一条USB 2.0总线理论带宽480Mbps去掉协议开销和LAN9512芯片的转发损耗实际打七折再打七折就是这个数。这个瓶颈是硬件层面的没法靠软件突破但你把它定位成下载机、备份机、家庭相册服务器完全够用。这个项目我跑了将近一年B没有关机也没有清过缓存稳定性出乎意料的好。唯一一次故障是因为供电的充电头老化电流输出不稳导致移动硬盘频繁掉盘换了足额5V/2A电源后再没出过问题。5. 常见问题与排查技巧实录5.1 供电不足与USB外设B最典型的故障类型就是供电不足。四个USB口全插满再挂一个无线网卡如果电源只有5V/1A你会发现U盘时而认时而不认网卡疯狂掉线甚至整机重启。这是因为多个USB外设瞬时电流叠加把输入电压拉低到4.6V左右板载稳压器开始极限挣扎。排查方法很简单用万用表量B上的5V引脚和GND引脚之间的电压空闲时要稳定在5.0V左右满载时低于4.8V就基本可以断定电源不够了。解决方案不外乎两个换一个5V/2A以上的正规电源或者给耗电大的外设单独接带供电的USB Hub。我建议双管齐下因为B的USB口直供能力本身就有限长期过载会加速板上电源电路老化。5.2 Micro SD卡卡槽与读写稳定性Micro SD卡槽虽然比初代的SD卡槽好用但也有自己的毛病卡簧容易松时间长了可能出现“卡插着但系统突然掉盘”的情况。另外劣质TF卡在持续写入场景下掉速严重甚至会出现文件系统损坏。如果你发现B用着用着系统卡死重启后进不去系统优先怀疑SD卡。把卡拔出来插到电脑上用SD Card Formatter做一次全卡格式化再用resilio工具或者dd备份恢复。重要配置和代码要养成定期备份的习惯我就吃过这个亏一个跑了三个月的小项目因为SD卡突然坏了代码和数据库全没后面学乖了每天凌晨用cron把关键目录打包到移动硬盘里。5.3 以太网/USB总线共享瓶颈前面提过B的LAN9512是一颗集成了USB Hub和以太网控制器的芯片这意味着你在B上插U盘、移动硬盘、4G上网卡、USB声卡所有这些流量都挤在一条USB 2.0总线上同时CPU还在跑单核。所以当你在拷贝文件的同时插上一个USB摄像头有可能会出现画面撕裂、帧率暴跌这是带宽共享和CPU争抢的双重结果。要缓解可以试试这几个方向把耗时任务错峰安排比如定时脚本放在凌晨跑用Ubuntu或Raspbian的精简版系统减少后台开销在移动硬盘上启用ext4而不使用NTFS降低CPU在文件系统转换上的消耗。是的NTFS挂载需要fuse和ntfs-3g在单核ARM11上处理器占用高得很。5.4 GPIO使用中的常见坑B的GPIO电平是3.3V不是5V。直接接5V逻辑的设备比如老式51单片机的引脚可能导致GPIO损坏。正确做法是加电平转换模块或者用分压电阻。这一点我在新手阶段差点烧坏一脚后来养成了习惯接任何外部模块前先查这个模块的输出电平是5V还是3.3V再决定要不要加逻辑电平转换。还有一个常见问题是引脚编号混乱。RPi.GPIO的setmode有两种编号方式BOARD模式按物理引脚号来BCM模式按Broadcom芯片内部名称来。比如你要控制的可能是物理引脚11它的BCM编号是GPIO17。如果你在setmode(BCM)模式里写了GPIO11那对应的其实是物理引脚23控制的是SPI时钟脚一接错就是控制了个寂寞。另外一个让我印象深刻的坑是PWM的声道冲突。GPIO18这个引脚在Linux中是bcm2835 PWM的默认输出口同时它还承载着模拟音频输出。如果你在用3.5mm耳机口播放音乐同时又拿GPIO18输出PWM信号这两个功能会产生冲突音频里会出现“哒哒”的噪音PWM输出也可能变得不稳定。我那次排查了很久最后发现是系统音频驱动占用了PWM通道。解决办法是用dtoverlay把PWM重新映射到其他引脚或者干脆不用GPIO18做PWM换一个软件模拟PWM的引脚。5.5 散热与长期运行稳定性B的发热量其实不大裸板跑满载CPU温度大概在60度左右这个温度对BCM2835来说完全安全。但如果放在密闭的弱电箱、叠加外壳又没开散热孔热量积聚后温度能到85度以上这时系统会开始降频表现是操作卡顿、网络延迟加大。我的做法是给CPU贴一块20mm × 20mm的铝散热片外壳顶部开一个通风口温度就能稳定控制在55度以下。还有一个更省事的小技巧在/boot/config.txt里加一行temp_limit85系统超过这个温度会自动降频保护虽然是最后一道防线但总比死机强。日常监控温度可以用vcgencmdvcgencmd measure_temp把这条命令加进cron每隔五分钟把温度写入日志文件万一出现不稳定回头翻日志就知道是不是散热问题。5.6 常见问题速查表现象可能原因解决方案上电后红灯不亮电源坏了或Micro USB线质量差换电源、换线很多劣质线只有充电功能没有数据能力红灯亮但绿灯不闪SD卡没插好或镜像损坏重插卡、重新烧录镜像开机进入不了系统SD卡文件系统损坏格式化并重新烧录备份重要数据SSH连不上SSH服务未开启在raspi-config中启用SSH或检查防火墙插USB移动硬盘后频繁重启供电不足换5V/2A电源给硬盘加独立供电系统时间总是对不上没有RTC模块且长期断网使用systemd-timesyncd或安装chrony做时间同步GPIO输出电平不对引脚编号模式选错统一使用BCM编号写程序前先核对运行速度越来越慢SD卡性能衰减或剩余空间不足清理缓存、迁移日志或换新卡结尾一点个人的体会B放在今天算是一块名副其实的老硬件了我自己手里这块也没舍得扔主要拿来当串口调试终端和GPIO练习板。它不像后来的树莓派4B那样能当主力电脑用但它教会我的恰恰是那些在强大硬件上容易被忽略的东西——怎么在有限的内存里做内存管理怎么在单核CPU上优化脚本性能怎么在共享总线上规划外设流量这些底层经验在后来用树莓派4B、Compute Module 4的时候全都派上了用场。最后再分享一个小技巧B虽然不支持新的64位系统但是装一个32位Raspberry Pi OS Lite把桌面环境彻底关掉然后启用zram压缩虚拟内存能让你在512MB内存上跑更多服务都不至于OOM。具体的操作就是安装zram-tools改一下/etc/default/zramswap里的algozstd和size256重启生效。这招我实测下来B跑Nginx加一个Python后台进程加一个InfluxDB内存还能剩一百多兆这个折腾的过程本身就很有意思。如果你手头正好有一块闲置的B不妨也翻出来试试也许它还能给你带来不少惊喜。
返回列表