행복한 하루

Raspberry PI 4(CM4 Module)과 IO보드(MCUZONE Tiny, waveshare CM4-IO-BASE-B)에서 파이캠(OV5647) 카메라 동작 시키기 본문

RaspberryPi/CM4(Compute Module)

Raspberry PI 4(CM4 Module)과 IO보드(MCUZONE Tiny, waveshare CM4-IO-BASE-B)에서 파이캠(OV5647) 카메라 동작 시키기

변화의 물결 2022. 5. 27. 17:18

 

 

안녕하세요.

  라즈베리 파이 4 Micro SD Card 버전보다는 CM4 eMMC 모듈 버전이 좀 더 안정적이고 빠르다고 생각되어 CM4 I/O 보드로 카메라 동작 테스트를 하였습니다. 그런데, 현재 라즈베리 파이 OS와 보드에 따라서 차이가 있었습니다.


1. 테스트한 H/W 제품

  - CM4 eMMC 16GB 모듈, 210406CM4_TinyHDMI I/O 보드, CM4-IO-BASE-B(waveshare) 보드, 파이캠(OV5647)

2. 테스트한 OS

  - 2022-04-04-raspios-buster 32bit ,  2022-04-04-raspios-bullseys 32bit

 

  - OS가 Debian 10(buster)에서 Debian 11(bullseye)로 업그레이드되면서 커널, 패키지, 암호 보안, 파일 시스템 등 업그레이드되었다고 합니다. 그중에서 카메라 부분도 크게 변화가 있었습니다.  카메라 모듈에 액세스 하는 데 사용하는  드라이버가 표준 Linux API인 libcamera로 대체되었고 raspicam apps과 Picamera Python library는 더 이상 지원하지 않는다고 합니다. 이렇게 되면 소스 공개되는 부분도 증가되고, 제3자가 새로운 카메라 하드웨어와 소프트웨어를 더 쉽게 개발할 수 있다고 합니다. 

 

 그러나 아직 초기 릴리즈 버전에는 문제 사항이 있다 하니 확인하시고 디버깅에 시간 낭비하는 것을 줄이면 좋을 듯합니다. 추후에 수정될 수 있다고 합니다.

 

 “1. X Windows에서 실행할 때 미리 보기(preview)는 라즈베리파이 Zero 또는 라즈베리파이 1, 2 또는 3 장치에서 작동하지 않습니다. 라즈베리파이 4 사용자 또는 X Windows를 사용하지 않는 사용자는 영향을 받지 않습니다.

2. 라즈베리파이 카메라 모듈 2, 라즈베리파이 카메라 모듈 2 NoIR 및 라즈베리파이 HQ 카메라는 아직 새로운 라즈베리파이 Zero 2W에서 작동하지 않습니다. “

3. 라즈베리 파이 CM4 모듈 카메라 설정  하기

  - bullseye OS에서 libcamera 라이브러리를 사용할 경우, raspi-config -> Interface Option -> Legacy Camera 옵션에서 Enable 설정을 할 필요가 없습니다.

  - buster OS에서는 raspi-config -> Interface Option -> Legacy Camera 옵션을 Enable 해야 카메라를 확인할 수 있습니다.

 

3.1 공통 설정 부분

  1) 보드와 OS에 상관없이 raspi-config -> Interface Option에서 I2C, SPI의 enabled를 Yes로 해주어야 합니다.

  2) CM4 모듈은 전력 아끼기 위해서 초기 설정에서 USB 2.0 포트를 disable로 해놓는다고 합니다.  그렇기 때문에 balenaEtcher로 Flash 한 다음 윈도우에서 CM4 eMMC 모듈 폴더(/boot/config.txt)의 파일을 수정해줍니다.   

dtoverlay=dwc2,dr_mode=host

그래야 USB 전원이 들어오고 키보드와 마우스를 사용할 수 있습니다.

 

  3) 입출력 핀 설정 방법

 - IO 보드와 OS와 상관없이 CM4 모듈에 카메라를 사용할 경우 아래와 같이 DT(Device Tree)를 설정해주어야 했습니다. 

pi@raspberrypi:~ $ wget https://www.waveshare.net/w/upload/7/75/CM4_dt_blob_Source.zip
pi@raspberrypi:~ $ unzip -o  CM4_dt_blob_Source.zip -d ./CM4_dt_blob_Source
pi@raspberrypi:~ $ sudo chmod 777 -R CM4_dt_blob_Source
pi@raspberrypi:~ $ cd CM4_dt_blob_Source/

#If you want to use both cameras and DSI0
pi@raspberrypi:~ $ sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp0-double_cam.dts
#If you want to ue both cameras and DSI1
pi@raspberrypi:~/CM4_dt_blob_Source $ sudo  dtc -I dts -O dtb -o /boot/dt-blob.bin dt-blob-disp1-double_cam.dts

#When using any DSI interface, HDMI1 will have no image output, even if you do not connect the DSI screen, as long as you compile the corresponding file, then HDMI1 will not output
#If you need to restore, please delete the corresponding dt-blob.bin: sudo rm -rf /boot/dt-blob.bin
# After execution, turn off the power and restart the CM4

 

3.2 bullseye OS에서 CM4-IO-BASE-B 경우

   - waveshare 사이트에 잘 나와 있습니다. 그것을 참고하면 아래와 같습니다.

 

  1) 부팅 설정 

pi@raspberrypi:~ $ sudo vim /boot/config.txt

#camera_auto_detect 부분을 주석 처리해줍니다.
#camera_auto_detect=1

# 아래 내용을 추가하면 되는데, 가지고 있는 카메라의 종류를 맞게 입력하면 됩니다.
# 현재 가지고 있는 모듈이 ov5647이라서...
#Add the following lines:
dtoverlay=ov5647,cam1
dtoverlay=ov5647,cam0

# 위의 내용에서 카메라 종류가 다르다면 아래를 것 중 하나를 선택하면 됩니다.
#Add the corresponding line according to the camera you use, where imx219 is the camera sensor model, and there are other sensors
dtoverlay=ov5647,cam0
dtoverlay=imx219,cam0
dtoverlay=ov9281,cam0
dtoverlay=imx477,cam0

# 설정하고 저장합니다.

 

  2) 재부팅   

pi@raspberrypi:~ $ sudo reboot

 

  3) 카메라 작동 확인

  - 위와 같이 설정에 문제가 없다면 장착된 카메라의 정보가 나오게 됩니다. 

pi@raspberrypi:~ $ libcamera-hello --list

  - 1개 카메라가 장착된 경우

 

 - 2개 카메라가 장착된 경우

 

  -  이전 vcgencmd 명령어를 실행하면 카메라가 없다고 나옵니다. bullseye OS에서는 이것으로 카메라 지원 여부를 판단하면 안 됩니다.    pi@raspberrypi:~ $ vcgencmd get_camera

 

  4) 영상 확인

  - 카메라 실시간 작동을 확인할 수 있습니다. 

pi@raspberrypi:~ $ libcamera-hello -t 0

3.3 bullseye OS에서 210406CM4_TinyHDMI I/O 보드 경우

  1) 부팅 설정

  - CM4-IO-BASE-B 보드와 다른 점은 /boot/config.txt 설정에서 

pi@raspberrypi:~ $ sudo vim /boot/config.txt

 

  

# camera_auto_detect의 주석을 해제합니다.
camera_auto_detect=1

 그리고 #dtoverlay=ov5647,cam0  설정을 넣어 주면 작동하지 않습니다. 이 부분을 입력했다면 주석 처리합니다.

  

3.4 busterOS에서 210406CM4_TinyHDMI I/O 보드 경우

  1) 위의 “공통 설정 부분(3.1)”내용만 작업해주면 문제없이 카메라 동작하는 것을 확인할 수 있습니다.

  2) 카메라 장착 확인

pi@raspberrypi:~ $ vcgencmd get_camera

   3) 카메라 동작 확인

   - 카메라 실시간 동작을 확인할 수 있습니다. 

pi@raspberrypi:~ $ raspistill  -t  0

4. 설정 후기

  - 처음에는 CM4 모듈과 I/O 보드에서 USB 연결이 안 되어 H/W 문제 있은가 하며 해결했지만, 카메라는 연결이 안 되는 것은 어떻게 해도 해결되지 않아서 OS를 다시 설치해보고, 구글링 해보아도 딱히 나오지 않아서 포기했습니다. 시간 좀 지나고 생각이 나서, 정말 안될까 해서 다시 검색해보니 고수분들이 방법들을 적어 놓아서 알게 되었습니다.

 

  - 새로운 CM4모듈과 I/O 보드는 아직 국내는 자료가 많이 없었습니다. 이제 조금씩 글이 올라오고 있는 듯합니다.

   - H/W에 문제없고, dts 설정만 잘해준다면 기존에 사용했던 것과 동일하게 사용할 수 있는 것을 확인했습니다. 그리고 eMMC 버전이 SD CARD 버전보다는 조금 빠르다고 조금 느껴졌습니다. (느낌일 수도 ;;;)

   - OpenCV에서 입력 영상으로 하는 방법도 확인해보아야 할 듯합니다.

 5. 여담으로

  2022-04-04-raspios-bullseye 32bit 버전을 설치한 경우 KVM 제품에 연결한 무선 키보드와 마우스는 작동하지 않았습니다. 그래서 직접 IO보드에 USB Dongle을 연결하니 작동했습니다. 그러나 2022-04-04-raspios-buster 32bit 버전에서는 KVM에 USB Dongle을 연결해도 작동하였습니다.

  KVM 제품이 하나뿐이라 정확히는 알 수 없으나 이런저런 드라이버 문제가 있을 수도 있다는 것을 참고하면 좋을 것 같습니다.

 

 

감사합니다.

  

 

<참고 사이트>

 1. CM4-IO-BASE-B(CM4 에서 카메라 연동하는 방법)

https://www.waveshare.com/wiki/CM4-IO-BASE-B#CSI_DSI

2.Bullseye camera system

https://www.raspberrypi.com/news/bullseye-camera-system/

3. 라즈베리파이 소식 - 불스아이(Bullseye) 라즈베리파이 OS의 새로운 버전입니다.

https://www.robotstory.co.kr/london/?mode=view&board_pid=241

4. 디바이스 트리, 오버레이, 파라미터(dts 명령어란)

https://wikidocs.net/3205

 

 

Comments