CM4-IO-WIRELESS-BASE-B教程

资料


官方手册

CM4核心板数据手册

原理图

3D图

程序

软件


说明

产品概述

基于树莓派 CM4 设计的带 UPS 工业扩展模块,板载了千兆以太网、HDMI、USB 和 GPIO 等常用接口,支持通过 M.2 B KEY 外接 4G/5G 等无线通信模块,还扩展了 RS485、CAN 和 RTC 等工业接口资源。工业导轨外壳设计,非常适用于构建物联网网关、4G/5G 路由器、物联网数据采集,甚至将其用作工业自动化和控制系统中的可编程逻辑控制器等等。

使用注意事项

1:禁止带电时拔插除USB和HDMI之外的任何设备
2:在连接前确认风扇电压,支持5V 和 12V 默认连接12V,切换请修改FAN_VCC的电阻
3:为了保证CM4供电正常,在使用Type C 接口烧录镜像时,请不要连接其他设备。
4:模块需要为其提供5V 2.5A /12V 1A或者更加高功率的供电。否则可能出现自动关机,降频等等问题。
5:首次接上电池有可能会没有电源输出,需要按一下UPS模块上的BOOT激活按键或者充一下电激活电池保护芯片才会有电源输出。UPS模块的电源开关需要拨到OFF的位置,CM4底板的开关拨到ON,即可使用。
6:USB2.0 默认是关闭的,如需打开需要在config.txt中添加 dtoverlay=dwc2,dr_mode=host
7:使用UPS单独供电时,电路不要超过2.5A,长时间工作在2.5A状态下会发热升温,注意散热。
8:外部供电必须大于整个系统用电,否则长时间没有足够电流给电池充电,电池电量越来越低直到关机。
9:当系统负载大而电池电压低时,有可能会出现电池电流不足而导致系统不断重启的情况。
10:电池比较牢固,拆卸需要搭配工具(螺丝刀),拆电池时切忌用螺丝刀撬电池正极容易导致短路,要撬电池负极。

锂电池使用注意事项

  • 锂聚合物和锂离子电池很不稳定。如果充电或使用不当,可能会导致火灾,人身伤害和财产损失。
  • 对电池组充电和放电时,切勿极性连接错误。请勿选用其他劣质的充电器或充电板对锂电池进行充电。
  • 请勿混用和使用旧电池和新电池,避免使用其他品牌的电池。
  • 如需另购锂电池产品,须确保电池参数与锂电池扩展板兼容,推荐选择正规的电池厂家,并需要自行老化测试确保锂电池能够稳定安全工作。
  • 锂电池具有循环寿命,请在达到使用寿命或使用两年时(以先到者为准),用新电池更换旧电池。
  • 请妥善放置电池类产品,远离易燃易爆类物品,远离儿童,避免因保管不慎,引发安全事故。


产品尺寸

CM4-IO-WIRELESS-BASE-B

Compute_Module 4 核心板

板载资源


标号名称说明
1CM4 连接器适用于 Compute Module 4 的所有版本
2HDMI 接口HDMI 接口,支持 4K 30fps 输出
3USB 2.0 接口3 路 2.0 接口,支持各种 USB 设备插入
4RJ45 千兆网口RJ45 千兆网口,支持 10/100/1000M 网络接入
5DC 供电接口7 ~ 36V DC 供电接口
6CM4 状态指示灯红灯(PWR):树莓派电源指示灯
绿灯(ACT):树莓派工作状态指示灯
74G/5G 模组状态灯红灯(STA):模组使能指示灯
绿灯(NET):模组运行状态指示灯
8PWR & USB 接口5V DC 供电接口或者 USB 烧录接口
9M.2 B KEY支持接入 4G/5G 或者其他 USB 通道的通信模块
10Nano-SIM 卡座可接入标准 Nano-SIM 卡,用于 4G/3G/2G 上网
11BOOT 开关按钮ON:Compute Module 4 开机引导转移到 USB Type-C 接口上
OFF:Compute Module 4 开机引导为 eMMC 或者 Micro SD 卡
12UPS 开关按钮ON:打开 UPS 给 CM4 供电
OFF:关闭 UPS 给 CM4 供电
13DC 供电接口7 ~ 36V DC 供电接口
14双路非隔离 RS485 接口双路 RS485 接口,提供 600W 防雷、浪涌和 15KV 静电保护 (预留 120R 可选平衡电阻跳线帽)
15非隔离 CAN 接口防静电和瞬态尖峰电压 (预留 120R 可选平衡电阻跳线帽)
16Micro SD 卡接口用于接入带系统的 Micro SD 卡,以启动 Compute Module 4 Lite
17FAN 供电选择可选择 5V 或 12V 电压驱动风扇
18CAM 接口MIPI CSI 摄像头接口
19RTC 电池连接座可接入 CR1220 纽扣电池
20M.2 VCC 供电选择选择 3.3V 或者 4.2V 供电
RTC 中断管脚切换PI-RUN: RTC 触发中断 CM4 重启
GN-EN: RTC 触发中断 CM4 断电
D4: RTC 触发中断 D4 管脚
22IO-VREF 选择CM4 IO 逻辑电压切换 3.3V 或者 1.8V
23FAN 供电选择可选择 12V (默认) 或 5V 电压驱动风扇
24系统功能切换BT_DIS: 蓝牙禁用,仅供带天线的 CM4 版本使用
WiFi_DIS: WiFi 禁用,仅供带天线的 CM4 版本使用
WP_DIS: 启动方式切换,仅供不使用 EMMC 启动或 SD 启动的情况下使用
25RTC/FAN I2C 总线选择SDA0/SCL0: I2C-10 和 CSI/DSI 共用
GPIO3/2: I2C-1 和 40PIN 共用
26部分 GPIO 接口包含一组 I2C 和 2 个 GPIO 以及电源
27UPS Module Mini 接口使用10440 3.7V 锂电池



注意事项

禁止带电时拔插任何设备

镜像烧录

EMMC版本点击这里
LITE版本点击这里

RS485

默认关闭,如需打开需要在config.txt中添加内容:
sudo nano /boot/config.txt

dtoverlay=uart3
dtoverlay=uart5

设备号分别是

/dev/ttyAMA1 
/dev/ttyAMA2



CAN

默认关闭,如需打开需要在config.txt中添加内容:

#打开编辑config.txt
sudo nano /boot/config.txt
#添加以下内容
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
#重启
reboot 

重启之后执行:

dmesg | grep spi0

 执行:

sudo ip link set can0 up type can bitrate 1000000
sudo ifconfig can0 txqueuelen 65536
ifconfig

 出现can0 设备号说明驱动成功

测试

安装can-utils:

sudo apt-get install can-utils

接收数据

candump can0

发送数据

cansend can0 000#11.22.33.44
#其中11.22.33.44 是数据
#如果需要发送其他数据可以使用继续添加例如
# cansend can0 000#11.22.33.04.70
#不可以使用英文和中文,两位一码格式添加



M.2 B KEY

板载M.2 B KEY 内部带有PCIE、USB2.0、GPIO、I2C、SPI接口
默认的只能连接 :
SIM7600G-H-M.2
SIM8202G-M2
SIM8200EA-M2
等M.2 B KEY 接口的模块
支持M.2 B KEY 接口的 NVME 2242 的SSD




4G/5G

板子本身不支持4G/5G,需要通过M.2 B KEY接口来接入模组,M.2 B KEY 只有USB2.0 通道

4G/5G 模组连接,然后在插入SIM卡

如果需要关闭4G/5G 模组,可以使用GPIO6 (BCM编码 6)控制,GPIO6输出高电平关闭模组,GPIO6输出低电平开启模组
关闭或者开启模需要一定时间(大约30秒),如果在开启前没有连接天线或者没有接入SIM卡
如果模组不能开机,可能是GPIO6 引脚被拉高了,请用以下指令拉低GPIO6引脚开机:

echo Exporting pin 6
echo 6 > /sys/class/gpio/export
echo Setting direction to out.
echo out > /sys/class/gpio/gpio6/direction
echo Setting pin 0

M.2 4G/5G 网卡

M.2 状态灯状态描述:

STANET状态
长亮熄灭关机 或者 正在开机
长亮长亮正在查找网络
长亮闪烁已联网,工作正常
熄灭闪烁/长亮正在关机

在配置前,请确认模块已经开机
5G 参考 [5G配置]

4G配置

sudo apt-get install minicom
sudo minicom -D /dev/ttyUSB2
#输入以下指令:
AT+CUSBPIDSWITCH=9011,1,1
#返回OK 即可
#然后等待网卡重启
#此指令只需要设置一次,下次上电会默认在这个模式下
#如果无法获取USB0网卡执行:
sudo dhclient -v usb0

RNDIS拨号上网请参考: RNDIS拨号上网

正常执行上面之后会识别到USB0网卡(如果你没有连接其他USB网卡)

如果你使用物联网卡,比如移动物联网卡,成功注册网络;但是拨号上网失败,无法ping通,可以尝试用以下AT指令的其中一条选择最优频段:

AT+CNBP=0x0002000000400183,0x000001E000000000,0x0000000000000021
AT+CNBP=0x0002000000400180,0x480000000000000000000000000000000000000000000042000001E200000095,0x0000000000000021

AT指令

如果无法连接网络,可以通过指令AT检查状态

sudo apt-get install minicom
sudo minicom -D /dev/ttyUSB2

常用AT指令

下面AT指令4G/5G模组指令通用

命令说明返回值
ATAT测试指令OK
ATEATE1设置回显
ATE0关闭回显
OK
AT+CGMI查询模组制造商OK
AT+CGMM查询模组型号OK
AT+CGSN查询产品序列号OK
AT+CSUB查询模块版本以及芯片OK
AT+CGMR查询固件版本序列号OK
AT+IPREX设置模块硬件串口波特率+IPREX:
OK
AT+CRESET复位模块OK
AT+CSQ网络信号质量查询,返回信号值+CSQ: 17,99
OK
AT+CPIN?查询SIM卡状态,返回READY,表示SIM卡能正常识别+CPIN: READY
AT+COPS?查询当前运营商,正常联网后会返回运营商信息+COPS:
OK
AT+CREG?查询网络注册状态+CREG:
OK
AT+CPSI?查询UE系统信息
AT+CNMP网络模式选择命令:
2:Automatic
13:GSM only
38:LTE only
48 : Any modes but LTE
... ....
OK

更多AT指令参考: AT_Command_V2.00
更多文档参考:SIMCom


RTC FAN

  • 注意事项:请在接通拓展板电源前接上风扇再完成测试,请不要在拓展板已通电即风扇控制芯片已经通电之后再接上风扇,否则会烧掉芯片!
  • 注意事项:连接前请确认风扇电压和实际上连接的风扇供电

使用树莓派系统(2021-05-07-raspios-buster-armhf-full )
注意 使用RTC禁止使用DSI和CSI
如果需要同时使用,将I2C切换到I2C1设备上(右边)

切换之后所有程序或者驱动全部需要修改
例程默认使用I2C10(左边)

如果需要简单使用,或者需要添加到你程序中,参考C和Python例程参考 [点这里]

下面是将驱动添加至内核中

RTC

sudo nano /boot/config.txt
#在最后添加
dtparam=i2c_vc=on
dtoverlay=i2c-rtc,pcf85063a,i2c_csi_dsi
#在dtparam=audio=on前面添加# 号
#dtparam=audio=on
#保存退出,重启
sudo reboot

Hwclock简单使用

同步系统时钟 -> 硬件时钟

sudo hwclock -w

同步硬件时钟 -> 系统时钟

sudo hwclock  -s
#需要关闭网络,或者关闭网络对时,负责会被改回去

设置硬件时钟时间:

sudo hwclock --set --date="9/8/2021 16:45:05"

查看硬件时钟

sudo hwclock -r

显示版本信息

sudo hwclock --verbose



风扇

在上电的时候 风扇会转1秒,然后停止2秒,再转,这是正常现象
风扇目前没有官方的配置方法,有一个第三方配置方法:https://github.com/neg2led/cm4io-fan
此方法为第三方发布,不是官方发布,出现任何问题,概不负责!

mkdir -p ~/src
cd ~/src
git clone https://github.com/neg2led/cm4io-fan.git
cd cm4io-fan
sudo chmod 777 install.sh
sudo  ./install.sh
#下面是对于config.txt的描述介绍
#############################
Name:   cm4io-fan
Info:   Raspberry Pi Compute Module 4 IO Board fan controller
Load:   dtoverlay=cm4io-fan,<param>[=<val>]
Params: minrpm             RPM target for the fan when the SoC is below 
                           mintemp (default 3500)
       maxrpm              RPM target for the fan when the SoC is above
                           maxtemp (default 5500)
       midtemp             Temperature (in millicelcius) at which the fan
                           begins to speed up (default 50000)
       midtemp_hyst        Temperature delta (in millicelcius) below mintemp
                           at which the fan will drop to minrpm (default 2000)
       maxtemp             Temperature (in millicelcius) at which the fan 
                           will be held at maxrpm (default 70000)
       maxtemp_hyst        Temperature delta (in millicelcius) below maxtemp
                           at which the fan begins to slow down (default 2000)
 #############################
或者 直接参考如下:
dtoverlay=cm4io-fan,minrpm=500,maxrpm=5000,midtemp=45000,midtemp_hyst=2000,maxtemp=50000,maxtemp_hyst=2000
温度高于45摄氏度开始加速,高于50摄氏度最高速

如果出现无法正常编译,请点击此处

CSI DSI

CSI 和 DSI默认是关闭的,使用摄像头和DSI的时候会占用I2C-10、I2C-11、I2C-0 三个I2C设备
CM4-DUAL-ETH-4G/5G-BASE 的DSI接口是DSI1接口
开机执行如下:

sudo apt-get install p7zip-full
wget https://www.waveshare.net/w/upload/4/41/CM4_dt_blob.7z
7z x CM4_dt_blob.7z -O./CM4_dt_blob
sudo chmod 777 -R CM4_dt_blob
cd CM4_dt_blob/
#如果使用两个摄像头和DSI0 执行
sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts
#如果使用两个摄像头和DSI1 执行
sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp1-double_cam.dts
#在使用任意DSI时,HDMI1没有图像输出,哪怕你没有连接DSI屏幕只要编译的对应的文件,那HDMI1就没有输出了
#如果需要恢复,删除对应的dt-blob.bin 即可: sudo rm -rf /boot/dt-blob.bin 
#执行完毕 关闭电源 重启CM4

再连接摄像头和DSI屏幕:
1: 确保断电状态下连接
2: 使用CM-DSI-ADAPTER 转接板连接Compute Module 4 PoE Board和DSI屏幕
3: 使用CSI转接线转接板连接Compute Module 4 PoE Board和CSI摄像头
3: 连接电源
4: 等待几秒后屏幕启动
5: 如果无法启动,检查/boot/dt-blob.bin 是否存在,如果存在再次重启即可
6: 摄像头需要运行raspi-config,选择Interfacing Options->Camera->Yes->Finish-Yes,reboot系统,打开enable camera,然后重启即可保存修改。

参考

测试树莓派摄像头 查看接入的第一个摄像头画面:

sudo raspivid -t 0 -cs 0

查看接入的第二个摄像头画面:

sudo raspivid -t 0 -cs 1


参考CSI相机 DSI显示器

UPS 电池电量检测跟功能引脚

  • UPS( INA219 ) 在i2c-10 上,地址是 0x43 (7位地址)
  • 输入如下命令运行程序
sudo apt-get install p7zip
wget https://www.waveshare.net/w/upload/5/59/CM4_UPS_Code.7z
7zr x CM4_UPS_Code.7z -r -o./
cd CM4_UPS_Code
python3 INA219.py
  • 程序运行后会输出电池电压,电流,功率以及电池剩余电量百分比等数值。


注意:电流为正数则表示电池输出电流(可认为树莓派负载电流),如果电流为负数则表示电池充电电流。
当系统负载大而电池电压低时,有可能会出现电池电流不足而导致系统不断重启的情况。这个是不希望看到的。实际应用中可以通过判断电池电压过低自动关机避免。
示例程序中已经添加电池电压判断,电池电压过低而没有外接电源充电时,程序会60s内关闭系统。
程序显示如下语句表示电池电压过低,需要及时充电,否则程序会自动关机。

Voltage Low,please charge in time,otherwise it will shut down in 58 s

如果需要使用摄像头或者DSI屏幕,建议将INA219 的I2C管脚切换到GPIO2/3 切换之后程序中修改:

#ina219 = INA219(i2c_bus=10,addr=0x43)
ina219 = INA219(i2c_bus=1,addr=0x43)
  • 当出现固定好外壳,打开UPS时,UPS没有输出,需要启动CM4,控制P2(物理引脚13)引脚拉低500ms,随后拉高即可
  • 如果需要知道电池状态,则需要读取P25(物理引脚37)引脚
    • 读取出来为低,则正在充电
    • 读取出来为高,则没有充电
    • 读取为1Hz占空比为50%的状态,则电池故障