模板: Compute Module 4 PoE 4G Board Tem

来自Waveshare Wiki
跳转至: 导航搜索

注意事项

禁止带电时拔插任何设备
以下所有内容全部在树莓派OS 上测试,不支持其他任何系统

镜像烧录

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

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的)。
CM4 Burn EMMC 12.png

使用前准备

例程下载

打开树莓派终端,执行如下指令:

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 内核驱动

2591树莓派.png

  • 然后重启树莓派
sudo reboot



USB TO UART

UART默认连接CM4,和CM4的 GPIO14(BCM)、 GPIO15(BCM)管脚连接
当开始串口调试时,可以直接通过此接口连接电脑,来登录CM4
Compute Module 4 PoE 4G Board 6.png
也可以通过此接口供电,不过默认是不可以供电的,如果需要通过此接口供电,请连接接口上面的的电阻(0R)


蜂鸣器/LED

蜂鸣器

蜂鸣器连接GPIO22(BCM编码 22),低电平使能
Compute Module 4 PoE 4G Board 4.png

LED

用户连接绿色GPIO20(BCM)和红色GPIO26(BCM) , 低电平亮
Compute Module 4 PoE 4G Board 5.png

【预期结果】

两个用户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设备
Compute Module 4 PoE 4G Board 3.png
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)
Compute Module 4 PoE 4G Board 8.png

隔离IO的逻辑电压设置
Compute Module 4 PoE 4G Board 10.pngCompute Module 4 PoE 4G Board 9.png

隔离I2C为GPIO2/3(BCM),I2C设备号I2C1,
Compute Module 4 PoE 4G Board 7.png


【预期结果】

两个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

Compute Module 4 PoE 4G Board 1.png
执行:

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

Compute Module 4 PoE 4G Board 2.png

出现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设备上(右边)
Compute Module 4 PoE 4G Board 11.png
切换之后所有程序或者驱动全部需要修改
例程默认使用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)

配置摄像头

  1. 执行如下命令进入编辑/boot/config.txt文件
    sudo nano /boot/config.txt
  2. 屏蔽或者删除掉摄像头自动检测语句
    CM4-NANO-B-CSI-00.png
  3. 添加你使用的摄像头的驱动动,这里我以IMX219为例,并且连接上CAM0上,附上适配CM4-NANO-B-CSI-02.png

    型号 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 即可
  4. 快捷键Ctrl+o保存文件,并回车
    CM4-NANO-B-CSI-03.png
  5. 快捷键Ctrl+x退出编辑器
  6. 重启CM4
    sudo reboot
  7. 测试摄像头

    1. 输入摄像头检测指令,此时可以看到摄像头已经被检查到了
      libcamera-hello --list-cameras

      CM4-NANO-B-CSI-01.png
    2. 显示摄像头画面到桌面
      libcamera-hello -t 0
    3. 拍摄照片
      libcamera-jpeg -o test.jpg
    4. 录制一个10s的视频
      libcamera-vid -t 10000 -o test.h264

    其他命令
    检查摄像头是否被检测到

    libcamera-hello --list-cameras
    

    打开对应的摄像头

    libcamera-hello  --camera 1
    libcamera-hello  --camera 0
    

    拍摄照片

    libcamera-jpeg -o test.jpg
    #可以添加 --camera 来指定摄像头
    

    老版本系统(buster)

    配置摄像头

    1. 执行如下命令进入树莓派配置
      sudo raspi-config
    2. 选择Interfacing Options并进入
      Serial-Open-1.png
    3. 选择Camera
      Camera-Open-2.png
    4. 选择开启摄像头接口
      Camera-Open-3.png
    5. 系统提示如下
      Camera-Open-4.png
    6. 回到主界面,选择Finish
      Camera-Open-5.png
    7. 随后重启系统
      Serial-Open-6.png

    测试摄像头

    • 测试拍照:
       raspistill -o image.jpg
    • 测试录像:
       raspivid -o video.h264 -t 10000
      • 其中 -t 10000 表示录制 10 秒,用户各根据自己的需要进行调整。

    参考:CSI相机