본문으로 건너뛰기

공장 빌드 및 테스트

이 문서는 공장에서 Modalix 기반 보드를 제작하고 테스트하기 위한 권장 절차입니다. 사용하는 보드, 테스트 픽스처 및 조립 라인에 맞게 조정하십시오.

  1. 물리적 조립
  2. 전기적 검증
  3. 보드 ID 및 MAC 주소 프로그래밍
  4. 테스트 스테이션 설정
  5. 테스트 이미지 부팅
  6. 진단 실행
  7. 양산 이미지 프로그래밍
  8. 애플리케이션 테스트, 라벨링 및 포장

시리얼 콘솔​

Modalix 보드에는 시리얼 콘솔이 두 개 있습니다. 두 콘솔 모두 하드웨어 흐름 제어를 비활성화한 상태에서 115200 baud로 동작합니다.

콘솔용도
tRoot UART(보안 부팅)보드 ID 및 MAC 프로그래밍, tRoot 업데이트 메시지
U-Boot/Linux UARTU-Boot 명령, Linux 로그인 및 이 페이지의 모든 테스트

각 콘솔의 커넥터는 보드에 따라 다릅니다. 레퍼런스 캐리어 보드의 경우 캐리어 보드 브링업에서 UART 역할을 참조하십시오. 호스트에서 각 콘솔에 연결합니다. 예를 들면 다음과 같습니다.

sima-user@sima-user-machine:~$ minicom -b 115200 -D /dev/ttyUSB0

장치 이름(/dev/ttyUSB0, /dev/ttyUSB1)은 호스트에서 케이블이 인식되는 방식에 따라 달라집니다.

물리적 조립​

이 단계는 보드와 생산 절차에 따라 다릅니다. 방열판 장착, 인클로저나 테스트 픽스처에 보드 설치 등이 포함됩니다.

전기적 검증​

  1. 모든 주 전원 레일의 측정 지점을 목록으로 정리하고, 각 레일의 임피던스를 측정하여 개방 및 단락 여부를 확인합니다.
  2. 측정 가능한 전압을 목록으로 정리하고, 모든 보드 또는 각 빌드의 샘플 보드에 대해 측정값을 기록합니다.
  3. 측정 가능한 클록을 확인하고, 각 시리얼 번호별로 기록합니다.

보드 ID 및 MAC 주소 프로그래밍​

보드 ID(장치 ID라고도 함)와 MAC 주소는 특수 tRoot 펌웨어를 통해 MLSoC의 1회 프로그래밍 가능(OTP) 메모리에 기록됩니다.

OTP 값은 영구적입니다

OTP 메모리는 한 번만 기록할 수 있습니다. 각 값을 확정하기 전에 반드시 확인하십시오.

  1. 호스트를 tRoot UART에 연결합니다.

  2. SPI 플래시 프로그래머를 연결한 다음 전원을 연결합니다.

  3. tRoot SPI 플래시 프로그래밍에 설명된 대로 OTP 프로그래밍용 tRoot 펌웨어를 SPI 플래시에 로드합니다.

  4. 전원을 제거하고 SPI 플래시 프로그래머를 분리한 다음 전원을 다시 연결합니다.

  5. tRoot 콘솔에서 보드 ID를 16진수로 입력하고 확인한 다음 MAC 주소를 입력합니다.

    enter hwid in hex format(ex:0x00010012)
    hwid entered is 0x123
    Press (Y/N)
    burning hwid
    Configured HWID :: 0x123
    Activated ID Selector :: 1
    Enter mac addr in format (A0:B1:C2:D3:E4:F5)

    MAC 주소를 입력하면 보드가 즉시 부팅 시퀀스를 완료합니다.

  6. 보드의 전원을 껐다 켠 다음, 부팅되는지와 보드 ID가 이미 프로그래밍되었다고 보고하는지 확인합니다.

  7. tRoot SPI 플래시 프로그래밍에 설명된 대로 양산용 tRoot 펌웨어를 SPI 플래시에 로드합니다.

tRoot SPI 플래시 프로그래밍​

tRoot 펌웨어는 단일 바이너리 troot_blob.be입니다. 위에서 사용한 OTP 프로그래밍용 펌웨어 또는 양산용 펌웨어, 두 버전 중 하나를 기록합니다. SiMa.ai는 Total Phase Flash Center 소프트웨어와 함께 Total Phase Aardvark I2C/SPI 호스트 어댑터를 사용할 것을 권장합니다.

  1. 호스트에 Flash Center를 설치합니다.
  2. 프로그래머를 보드의 SPI 플래시 헤더에 연결합니다. 이 커넥터는 보드에 따라 다르며, 일반적으로 2열 헤더입니다.
  3. Flash Center를 시작합니다. 이 단계를 자동화하려는 경우 명령줄 도구도 제공됩니다.
  4. 어댑터를 추가합니다.
  5. 대상 장치를 선택합니다. SPI Flash를 선택한 다음 보드에 실장된 부품을 선택합니다(예: Winbond W25Q16(2 MB)).
  6. troot_blob.be를 로드합니다.
  7. 플래시를 프로그래밍합니다.

테스트 스테이션 설정​

  1. 테스트 대상 보드에 캐리어 보드나 인터페이스 보드가 필요하면 연결합니다.
  2. 호스트를 tRoot UART와 U-Boot/Linux UART 모두에 연결합니다.
  3. 보드에 이더넷 포트가 있으면 각 포트를 호스트에 연결합니다.
  4. 보드에 MIPI 카메라 입력이 있으면 테스트용 카메라를 연결합니다.
  5. 보드가 PCIe 카드이면 폭이 x8 이상인 호스트의 PCIe Gen5 슬롯에 설치합니다.

테스트 이미지 부팅​

eMMC에 이미지 플래싱에 설명된 대로 SD 카드 또는 네트워크에서 최신 릴리스 테스트 펌웨어를 부팅합니다. 이더넷 포트를 네트워크 스트레스 테스트용으로 비워 둘 수 있으므로 SD 카드를 권장합니다.

진단 실행​

진행 순서는 유휴 온도 기록, 스트레스 테스트 실행, 최종 온도 확인, 각 I/O 인터페이스 점검입니다.

모든 테스트는 U-Boot/Linux 콘솔에서 실행합니다. 보드의 전원을 켜고 Linux 프롬프트가 나타날 때까지 기다린 다음, sima 사용자와 암호 edgeai로 로그인하고 root로 전환합니다.

sima@modalix:~$ sudo su

보드에 이더넷이 있으면 보드 포트마다 호스트에 주소를 하나씩 할당합니다. 예를 들어 호스트 인터페이스가 eno1인 경우 다음과 같습니다.

sima-user@sima-user-machine:~$ sudo ifconfig eno1:1 192.168.1.10 up
sima-user@sima-user-machine:~$ sudo ifconfig eno1:2 192.168.2.10 up
sima-user@sima-user-machine:~$ sudo ifconfig eno1:3 192.168.3.10 up
sima-user@sima-user-machine:~$ sudo ifconfig eno1:4 192.168.4.10 up

PCIe 카드의 경우 호스트의 전원을 켜기 전에 카드에서 외부 전원을 모두 제거하십시오. 카드는 슬롯에서 전원을 공급받습니다.

1. 유휴 온도​

이름이 simaai_modalix_thermal_sensor인 hwmon 장치를 찾습니다.

root@modalix:~# grep -l simaai_modalix_thermal_sensor /sys/class/hwmon/hwmon*/name

해당 장치의 temp1_input을 10회 읽고 평균을 구합니다. 값의 단위는 1/1000 섭씨 온도입니다. X를 찾은 번호로 바꾸십시오.

root@modalix:~# for i in $(seq 10); do cat /sys/class/hwmon/hwmonX/temp1_input; done | awk '{s+=$1} END {print s/NR/1000 " C"}'

2. 이더넷​

호스트에서 iperf3 서버를 시작합니다.

sima-user@sima-user-machine:~$ iperf3 -s

보드에서 각 이더넷 포트마다 클라이언트를 실행합니다.

root@modalix:~# iperf3 -c 192.168.1.10 -t 60 --logfile /tmp/iperf1 # end0
root@modalix:~# iperf3 -c 192.168.2.10 -t 60 --logfile /tmp/iperf2 # end1
root@modalix:~# iperf3 -c 192.168.3.10 -t 60 --logfile /tmp/iperf3 # end2
root@modalix:~# iperf3 -c 192.168.4.10 -t 60 --logfile /tmp/iperf4 # end3

3. 메모리​

root@modalix:~# stress-ng --class memory --all -1 --log-file /tmp/memorytest --log-brief --verify --abort -x atomic,heapsort,judy,mergesort,radixsort,tree,wcs,zlib -t 370s

4. CPU 캐시​

root@modalix:~# stress-ng --class cpu-cache --seq 2 -t 8s --log-brief --log-file /tmp/cpucache

5. CPU​

root@modalix:~# stress-ng --cpu 0 --verify -t 1m --log-brief --log-file /tmp/cpu0

--cpu 0은 모든 CPU에서 실행됩니다. 결과에 CPU 16개가 보고되어야 합니다.

6. 최종 온도​

유휴 온도와 같은 방법으로 온도를 다시 읽고, 보드의 열 한계와 비교합니다.

7. PCIe 루프백​

  1. 호스트에 sima_pcie_hostpkg.sh를 설치한 다음, 일치하는 바이너리로 보드를 부팅합니다.

  2. 보드가 부팅되면 보드 콘솔에서 다음을 실행합니다.

    root@modalix:~# sima_pep_test
  3. 호스트에서 1 MB 테스트 파일을 만들고 루프백 테스트를 시작합니다.

    sima-user@sima-user-machine:~$ dd if=/dev/urandom of=~/data1MB.bin bs=1M count=1
    sima-user@sima-user-machine:~$ sima_mla_test -Q 1 -q 0 -e 32 -i 8 -d ~/data1MB.bin

호스트에 송신 및 수신 프레임 수와 함께 성공 메시지가 출력됩니다.

8. MIPI 카메라​

  1. 테스트할 포트의 카메라 오버레이를 로드합니다. 재부팅하고 자동 부팅을 중단한 다음 dtbos를 설정합니다. 오버레이 이름의 형식은 modalix-som-<carrier>-<camera>-<port>.dtbo입니다. Modalix DevKit의 첫 번째 카메라 포트에 Arducam IMX477을 연결하는 경우는 다음과 같습니다.

    sima$ env set dtbos modalix-som-waveshare-ARDU-IMX477-1CAM.dtbo
    sima$ saveenv

    오버레이는 카메라, 포트 및 보드에 따라 다릅니다. MIPI 카메라 인터페이스를 참조하십시오.

  2. 테스트할 각 포트에 IMX477 카메라를 연결하고, 전원을 껐다 켠 다음 로그인하고 sudo su를 실행합니다.

  3. 원시 프레임을 캡처한 다음 ISP 출력을 시작합니다. 테스트할 포트에 맞게 video0raw 및 video0out을 변경하십시오.

    root@modalix:~# gst-launch-1.0 v4l2src device=/dev/video0raw ! 'video/x-bayer,format=rggb12le,width=2048,height=1080,framerate=30/1' ! queue ! multifilesink location=/tmp/mipi_in_%d.raw12 &
    root@modalix:~# gst-launch-1.0 v4l2src device=/dev/video0out ! 'video/x-raw,format=RGB,width=2048,height=1080,framerate=30/1' ! fakesink

    첫 번째 파이프라인은 공간이 제한된 /tmp에 초당 30개의 파일을 기록합니다. 약 10초 후에 중지하십시오. Ctrl+C를 눌러 두 번째 파이프라인을 중지한 다음, fg를 실행하고 Ctrl+C를 눌러 첫 번째 파이프라인을 중지합니다.

9. SD 카드​

보드가 SD 카드로 부팅되었다면 이 테스트를 건너뛰십시오. 그렇지 않으면 SD 카드를 삽입하고 스토리지 테스트 스크립트를 실행합니다. SD 카드에 대해 1을 선택한 다음, 빠른 처리량 테스트는 2, 카드 전체 읽기 및 쓰기는 3을 선택합니다.

root@modalix:~# /usr/bin/simaai_pt/emmc_sd_test.sh
Enter 0 - /dev/mmcblk0 (eMMC) or 1 /dev/mmcblk1 (SD card)
Choice: 1
1) Test 1: Memory Operations
2) Test 2: Throughput Measurement
3) Test 3: Whole memory read and write
4) Test 4: sd_card insertion and connection back
Enter your choice (1 or 2 or 3 or 4): 2
Throughput: 11.3099 MB/s

10. eMMC​

경고

이 테스트는 eMMC를 덮어씁니다. 보드가 네트워크 또는 SD 카드로 부팅된 경우에만 실행하고, 테스트 후에는 양산 이미지를 플래싱하십시오.

같은 스크립트를 실행하고 eMMC에 대해 0을 선택한 다음 2 또는 3을 선택합니다.

11. 디스플레이 및 USB​

보드에 디스플레이 출력이 있으면 네트워크 또는 SD 카드에서 eLxr 이미지를 부팅합니다. USB 키보드와 마우스를 연결하고 데스크톱이 1920×1080으로 표시되는지 확인합니다. 키보드와 마우스를 사용하여 콘솔과 동일한 자격 증명으로 로그인합니다.

12. NVMe​

NVMe 드라이브가 장착된 상태에서 드라이브가 인식되는지 확인한 다음, 직접 읽기 속도를 측정합니다.

root@modalix:~# nvme list
root@modalix:~# hdparm -tT --direct /dev/nvme0n1

드라이브를 포맷하고 마운트하려면 NVMe 스토리지 구성을 참조하십시오.

13. tRoot 자체 업데이트​

이 테스트는 swupdate로 tRoot 업데이트 패키지를 설치합니다.

  1. 양산용 troot-upgrade-simaai-ev.swu를 보드의 /tmp로 복사합니다.

  2. tRoot 콘솔과 U-Boot/Linux 콘솔을 모두 연결된 상태로 유지합니다.

  3. U-Boot/Linux 콘솔에서 root로 다음을 실행합니다.

    root@modalix:~# swupdate -v -H simaai-image-troot:1.0 -i /tmp/troot-upgrade-simaai-ev.swu
  4. tRoot 콘솔의 출력이 5분 이내에 멈추는지 확인합니다.

양산 이미지 프로그래밍​

eMMC에 이미지 플래싱에 설명된 대로 최신 릴리스 양산 이미지를 eMMC에 기록한 다음, 보드가 eMMC로 부팅되는지 확인합니다.

애플리케이션 테스트, 라벨링 및 포장​

이 단계는 제품에 따라 다릅니다.