模板: Compute Module 4 PoE 4G Board Tem
注意事项
禁止带电时拔插任何设备
以下所有内容全部在树莓派OS 上测试,不支持其他任何系统
镜像烧录
USB2.0
USB接口在CM4上默认是被禁用的,以节省电源。如果需要启动,你需要在config.txt文件中添加以下内容:
dtoverlay=dwc2,dr_mode=host
重启之后即可
如果使用最新的树莓派OS(2021年10月30号之后的镜像)USB2.0是默认是OTG模式,CM4会报错:
config failed, hub doesn't have any ports! (err -19)
不过USB还是可以使用的,如果想移除这个错误,在config.txt的[cm4]中移除otg_mode=1,并且添加dtoverlay=dwc2,dr_mode=host(不添加是无法识别USB的)。
使用前准备
例程下载
打开树莓派终端,执行如下指令:
sudo wget https://www.waveshare.net/w/upload/b/ba/Compute_Module_4_PoE_4G_Board_Code.zip unzip -o Compute_Module_4_PoE_4G_Board_Code.zip -d ./Compute_Module_4_PoE_4G_Board_Code sudo chmod 777 -R Compute_Module_4_PoE_4G_Board_Code cd Compute_Module_4_PoE_4G_Board_Code
安装库
所有库根据你需求安装,需要使用到那个就安装那个,不必全部安装
如果只是测试功能可以不安装任何库,直接使用C程序,我们C程序默认不需要安装任何库
随各个版本的更新可能存在部分软件不兼容,或者运行报错,如果出现这个问题,可以反馈给我们
- 安装BCM2835,打开树莓派终端,并运行下指令( 不建议使用)
#有疑问可以访问 http://www.airspayce.com/mikem/bcm2835/ #出现任何其他问题可以在上链接中反馈,请不要直接联系作者 wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz tar zxvf bcm2835-1.68.tar.gz cd bcm2835-1.68/ sudo ./configure sudo make sudo make check sudo make install
- 安装wiringpi
#WiringPi官方不支持CM4,不过可以安装非官方版本,由于此版本不是官方版本 #此版本仅适用于CM4 #出现任何其他问题可以在github上反馈,请不要直接联系作者 git clone https://github.com/WiringPi/WiringPi.git cd WiringPi/ ./build #执行gpio -v 出现版本号为2.6或者更高即可
- 安装Python函数库
#python2 sudo apt-get update sudo apt-get install python-pip sudo apt-get install python-pil sudo apt-get install python-numpy sudo pip install RPi.GPIO sudo pip install spidev sudo pip2 install python-can #python3 sudo apt-get update sudo apt-get install python3-pip sudo apt-get install python3-pil sudo apt-get install python3-numpy sudo pip3 install RPi.GPIO sudo pip3 install spidev sudo pip3 install python-can
开启I2C接口
- 在终端执行:
sudo raspi-config #选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动
- 然后重启树莓派
sudo reboot
USB TO UART
UART默认连接CM4,和CM4的 GPIO14(BCM)、 GPIO15(BCM)管脚连接
当开始串口调试时,可以直接通过此接口连接电脑,来登录CM4
也可以通过此接口供电,不过默认是不可以供电的,如果需要通过此接口供电,请连接接口上面的的电阻(0R)
蜂鸣器/LED
蜂鸣器
LED
用户连接绿色GPIO20(BCM)和红色GPIO26(BCM) , 低电平亮
【预期结果】
两个用户LED交替闪烁
LED变化一次,蜂鸣器响一次
【python例程】
cd LED_BUZZER/python/ sudo python main.py
【C例程】
cd LED_BUZZER/c/ make clean sudo make sudo ./main
4G/5G
板子本身不支持4G/5G,需要通过M.2 B KEY接口来接入模组,M.2 B KEY 只有USB2.0 通道,不支持PCIE设备
4G/5G 模组连接,然后在插入SIM卡
默认支持4G模组功能,5G模组部分功能不支持
5G 参考 [5G配置]
如果需要关闭4G 模组,可以使用GPIO6 (BCM编码 6)控制,GPIO6输出高电平关闭模组,GPIO6输出低电平开启模组
关闭或者开启模需要一定时间(大约30秒)
在下载的例程中有一个M_2_PWR 脚本,可以执行
sudo ./M_2_PWR 0 #打开模组 sudo ./M_2_PWR 1 #关闭模组
打开模组
5G模组不受使能管脚控
SIM7600 M.2 网卡
M.2 状态灯状态描述:
STA | NET | 状态 |
---|---|---|
长亮 | 熄灭 | 关机 或者 正在开机 |
长亮 | 长亮 | 正在查找网络 |
长亮 | 闪烁 | 已联网,工作正常 |
熄灭 | 闪烁/长亮 | 正在关机 |
在配置前,请确认 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 | AT测试指令 | OK |
ATE | ATE1设置回显 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
PCIE
PCIE接口为 PCIE 2.0 X1 接口,最大速度是500Mb/s
支持大多数PCIE x1 的卡,市面上许多的PCIEx1 设备卡,默认树莓派系统是不支持的,因为树莓派linux 内部没有添加驱动
在使用前先参考CM4支持设备测试
树莓派 [内核编译]
隔离GPIO/I2C
隔离GPIO输出为GPIO17 (BCM)和 GPIO27(BCM)
隔离GPIO输入为GPIO23 (BCM)和 GPIO24(BCM)
隔离I2C为GPIO2/3(BCM),I2C设备号I2C1,
【预期结果】
两个OUT 交替输出高和低电平
读取两个IN 的电平状态
【python例程】
cd IO/python sudo python main.py
【C例程】
cd IO/c make clean sudo make sudo ./main
隔离ADC
隔离ADC挂载在隔离I2C上, I2C地址为0x48
I2C默认关闭,开启I2C参考 开启I2C 章节
C
cd ADC/c/ sudo ./main
python
cd ADC/python/ sudo python examples/main.py
- 执行指令运行程序
预期结果
输出电压值
注意:ADC方案使用ADS1113芯片。内部自带基准电压2.048V,差分输入,输入电压范围:±2.048V
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 #不可以使用英文和中文,两位一码格式添加
例程
【Python例程】
- 进入对应的目录:
- 接收端运行receive.py:
sudo python reveive.py
- 发送端运行send.py:
sudo python send.py
本例程是基于python平台,确保以及安装了python-can库
在发送之前要先创建一个can设备,因为前面只是启用MCP2515内核:
os.system('sudo ip link set can0 type can bitrate 100000') os.system('sudo ifconfig can0 up')
- 第一步:连接到CAN总线
can0 = can.interface.Bus(channel = 'can0', bustyp = 'socketcan_ctypes')
- 第二步:创建信息
msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)
- 第三步:发送信息
can0.send(msg)
- 最后同样要关闭can设备
os.system('sudo ifconfig can0 down')
- 接收数据:
msg = can0.recv(10.0)
recv()中定义超时接收时间。
更多请参考:https://python-can.readthedocs.io/en/stable/interfaces/socketcan.html
【C例程】
- 阻塞接收,树莓派打开终端,运行:
cd CAN/c/receive/ make clean sudo make sudo ./can_receive
- 发送,树莓派打开终端,运行:
cd CAN/c/receive/ make clean sudo make sudo ./can_send
RS485/232
新系统(bookworm)
打开需要在 /boot/firmware/config.txt中添加内容:
dtoverlay=uart3 dtoverlay=uart5
reboot ls /dev/ttyAMA*
RS232占用GPIO5/GPIO4(BCM编码4/5),设备号ttyAMA3
RS485占用GPIO13/GPIO12(BCM编码13/12),设备号ttyAMA5
老版本系统(buster)
打开需要在config.txt中添加内容:
sudo nano /boot/config.txt
dtoverlay=uart3 dtoverlay=uart5
reboot ls /dev/ttyAMA*
RS232占用GPIO5/GPIO4(BCM编码4/5),设备号ttyAMA1
RS485占用GPIO13/GPIO12(BCM编码13/12),设备号ttyAMA2
如果是bullseye可能两种情况都有建议根据实际情况来选择对应的设备号
测试
sudo apt-get install minicom # RS232 sudo minicom -D /dev/ttyAMA1 #RS485 sudo minicom -D /dev/ttyAMA2
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秒,再转,这是正常现象
1:检查内核版本 是否高于或等于6.1.31
uname -a
2:config.txt 中添加
dtoverlay=i2c-fan,emc2301,i2c_csi_dsi,midtemp=45000,maxtemp=65000
3:风扇配置更多参数参考点这里
CSI DSI
配置文件
- CSI和DSI默认是关闭的,需要加载对应设备树用于开启,并且使用CSI摄像头与DSI屏幕的时候会占用I2C-10、I2C-11、I2C-0 三个I2C设备
- 输入一下指令:
sudo apt-get install p7zip-full -y 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/ #如果使用两个摄像头和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
新版本系统(bullseye)
配置摄像头
- 执行如下命令进入编辑/boot/config.txt文件
sudo nano /boot/config.txt
- 屏蔽或者删除掉摄像头自动检测语句
- 添加你使用的摄像头的驱动动,这里我以IMX219为例,并且连接上CAM0上,附上适配
型号 CAM0设置语句 CAM1设置语句 OV9281 dtoverlay=ov9281,cam0 dtoverlay=ov9281,cam1 IMX290/IMX327 dtoverlay=imx290,clock-frequency=37125000,cam0 dtoverlay=imx290,clock-frequency=37125000,cam1 IMX378 dtoverlay=imx378,cam0 dtoverlay=imx378,cam1 IMX219 dtoverlay=imx219,cam0 dtoverlay=imx219,cam1 IMX477 dtoverlay=imx477,cam0 dtoverlay=imx477,cam1 IMX708 dtoverlay=imx708,cam0 dtoverlay=imx708,cam1 - 如果使用的是树莓派官方摄像头,且只有一个摄像头接入,无需设置config文件,如果不是官方摄像头,请设置dtoverlay语句,不需要加cam后缀
- CM4-NANO-只用到CAM0,所以只需要添加一句 dtoverlay=imx219,cam0 即可
- 快捷键Ctrl+o保存文件,并回车
- 快捷键Ctrl+x退出编辑器
- 重启CM4
sudo reboot
- 输入摄像头检测指令,此时可以看到摄像头已经被检查到了
libcamera-hello --list-cameras
- 显示摄像头画面到桌面
libcamera-hello -t 0
- 拍摄照片
libcamera-jpeg -o test.jpg
- 录制一个10s的视频
libcamera-vid -t 10000 -o test.h264
- 执行如下命令进入树莓派配置
sudo raspi-config
- 选择Interfacing Options并进入
- 选择Camera
- 选择开启摄像头接口
- 系统提示如下
- 回到主界面,选择Finish
- 随后重启系统
- 测试拍照:
raspistill -o image.jpg
- 测试录像:
raspivid -o video.h264 -t 10000
- 其中 -t 10000 表示录制 10 秒,用户各根据自己的需要进行调整。
测试摄像头
其他命令
检查摄像头是否被检测到
libcamera-hello --list-cameras
打开对应的摄像头
libcamera-hello --camera 1 libcamera-hello --camera 0
拍摄照片
libcamera-jpeg -o test.jpg #可以添加 --camera 来指定摄像头
老版本系统(buster)
配置摄像头
测试摄像头
参考:CSI相机