2024/1/31

HUB8735 - Ameba Pro2 - AMB82 MINI

不曉得是不是一樣的東西。

不過說除了用 Arduino IDE 之外,也可以用 Standard SDK.
然後就是說參考: 就 follow Project README: clone , untar tools, export PATH.
然後就可以開始 build example 了。
因為 build 最後的 tool 有分 linux 版的 *.linux 和 windows 版的 *.exe。
這個 repo 的 linux file attibute 沒有設定對,build 的時候會出現 Error。
所以先去把所有的 *.linux 加上 execution.
開始 build..
cd ambpro2_sdk/project/realtek_amebapro2_v0_example/GCC-RELEASE/build/
cmake .. -G"Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake -DVIDEO_EXAMPLE=ON
cmake --build . --target flash_nn -j4
build 完,會是剛剛 --target 寫的 flash_nn.bin

燒錄是 tools/Pro2_PG_tool,把 zip 解開。把剛剛build 好的 flash_nn.bin copy 過來。
和用 Arduino IDE 一樣, HUB 8735 進入 download mode:
  • 短路 A5, 3V3 pin
  • 按一下 reset buuton
dmesg 看一下是 ttyUSB?

README 的說明 -b 2000000,會出現 ucf fail,看 ./uartfwburn.linux --help, -b 是 baudrate 的意思。
所以改成 9612000 後成功:
~/ambpro2_sdk/tools/Pro2_PG_tool _v1.3.0$ ./uartfwburn.linux -p /dev/ttyUSB0 -f flash_ntz.nn.bin -b 921600 -U
/dev/ttyUSB0 opened
ping ok
ucfg ok
Uart boot 
programing	[========================================] 100%        77824/       77824 bytes
programing done.
uboot ok
reset device
/dev/ttyUSB0 opened
ping ok
ucfg ok
download to offset 0x0
masked area [0x0, 0x0]
dowload 0, [0x0, 0xd9e000]
fw_len = 0xd9e000
programing	[========================================] 100%     14286848/    14286848 bytes
programing done.
done for download 0
download success
然後把 A5. 3V3 短路 pin 解開。reset
用 uart 115200 看到開機 log:
== Rtl8735b IoT Platform ==

[Normal mode]
BootFromNORFlash
[Start Boot ROM...]
=== Load PARTBL ===
=== Load Done ===
=== Load ISP_IQ ===
[fcs chk pass]
ISP_IQ @ 0x8401080, 0x2cf80, 0x0
mfcs_data version 0x00010001
fcs_data version 0x00010101
=== Process ISP_IQ ===
=== Load Done ===
=== Load BL ===
[Image Start Table @ 0x18200]
=== Load Done ===

== Boot Loader ==
Jul 12 2023:11:11:05
=== Load FCS Para ===
=== Load Done ===
[crc pass]
=== Load ISP_IQ Sensor ===
ISP_IQ @ 0x8401080, 0x2cf80
=== Process ISP_IQ ===
=== Load Done ===
=== Load FW1 ===
FW_ISP_IQ @ 0x8081080, 0x2ef80
=== Process FW_ISP_IQ ===
DRAM_TYPE is DDR2 128MB.
ddr_freq = 533
VOE flash @ 0x80b0080, 0x7ef80
FCS KM_status 0x00002081 err 0x0000200a
Wait KM fcs done 0 us
FCS TM_status 0x003f0000 
store fcs data for application 
RAM TM_STATUS 0x00bf0000 status 0x00000080
RAM TM_STATUS 0x00bf1208 err 0x00001208
read fcs_status 0x000000bf
                                                                                                                                               read fcs_status 0x000000bf
== Process VOE IMG ===
[Image Start Table @ 0x20106200]
RAM Load @ 0x812f100->0x20106200, 0x6a58
DDR Load @ 0x8136080->0x70100000, 0x19f574
=== FW Load Done ===

Boot Loader <==

== RAM Start ==
Build @ 15:20:47, Sep 13 2023

$8735b>interface 0 is initialized
interface 1 is initialized
cfg_size_lib = 29, cfg_size_user = 29

Initializing WIFI ...[Driver]: [HALMAC]
 11692M HALMAC_MAJOR_VER = 1
 HALMAC_PROTOTYPE_VER = 4
 HALMAC_MINOR_VER = 20
 HALMAC_PATCH_VER = 
[Driver]: The driver include MP
[Driver]: Ver = libwlan:2023.07.21.14.18_b9.5_a20c848742482c5f0ee2b39dd14c0c200435e46b
- download_firmware_88xx HALMAC_RET_SUCCESS
RFE type = 0
start_addr=(0x4000), end_addr=(0x8000), buffer_size=(0x4000), smp_number_max=(2048)

WIFI initialized
[FAST_CONNECT] Fast connect profile is empty, abort fast connection

init_thread(49), Available heap 0x6b847e0

use ATW0, ATW1, ATWC to make wifi connection
wait for wifi connection...

#
最後的 # 是按下 Enter 後出現的 prompt,因為 README 說要下命令 config wifi..
ATW0=<WiFi_SSID> : Set the WiFi AP to be connected
ATW1=<WiFi_Password> : Set the WiFi AP password
ATWC : Initiate the connection
下完之後,開始 scan , connect...
Interface 0 IP address : 172.24.1.117

init_thread(49), Available heap 0x6b82200
[video_voe_presetting] fps:30  w:1920  h:1080   

 voe heap size = 13455104
fwin(1),enc_en(0),IQ_OFFSET = 0x16520
 fwin(1),enc_en(0),SENSOR_OFFSET = 0x2e560
sensor id 1 iq_data 16520 sensor_data 2e560
hal_voe_ready 0x0 0xbf1208 
 read fcs_status 0x000000bf
[video_init] uvcd iq is null, use default.
[video_init] uvcd SNR is null, use default.
IQ:FW size (98342)
sensor:date 2023/7/18 version:RTL8735B_VOE_1.4.4.0
sensor:FW size (1812)
sensor timestamp: 2023/07/18
iq timestamp: 2023/05/15 14:48:54
ISP:1 ENC:1 H265:1 NN:1
hal_voe_ready 0x0 0xbf1208 
voe   :RTL8735B_VOE_1.4.4.0 
sensor:RTL8735B_VOE_1.4.4.0 
hal   :RTL8735B_VOE_1.4.4.0 
load time sensor:52us iq:2722us itcm:0us dtcm:0us ddr:0us ddr2:0us

RTSP[0] port: 554
fwin(1),enc_en(0),IQ_OFFSET = 0x16520
connect successful sta mode

 fwin(1),enc_en(0),SENSOR_OFFSET = 0x2e560
sensor id 1 iq_data 16520 sensor_data 2e560
hal_voe_ready 0x0 0x1718 
npu[7045d6e0] gck vip_drv_init, video memory heap base: 0x77000000, size: 0x01000000
NN IRQ default priority : 0, set to 9
npu[7045d6e0] HASHMAP 0x0x703fa994(process ID) INIT SUCCESS
npu[7045d6e0] HASHMAP 0x0x703fb6a0(memory wrap) INIT SUCCESS
npu[7045d6e0] HASHMAP 0x0x703fc2ec(network information) INIT SUCCESS
npu[7045d6e0] HASHMAP 0x0x703fcf10(segment information) INIT SUCCESS
VIPLite Drv version 10c00
set yolo confidence thresh to 0.500000
set yolo NMS thresh to 0.300000
Deploy YOLOv4t
...
開啟 vlc 連到 rtsp://172.24.1.117:554,就可以看到 yolov4 objection detection 的輸出。

2024/1/20

HUB 8735

ref: 下載 IDE (linux 用 zip。解開)

安裝 HUB 8735 的 board support package (?):
在 IDE 的 perference -- Settings -- Additional board manager URL 中,填入:
https://github.com/ideashatch/HUB-8735/raw/main/amebapro2_arduino/Arduino_package/ideasHatch.json
然後到 Tools -- Board -- Board Manager ,找 HUB 8735,會出現 ideaHatch Ameba Board,選一版 install (4.0.8-R).

完成後,Tools -- Board 的內容就會多一個 ideaHatch Ameba Boad 可以選。
選 HUB-8735


File -- Example -- AmebaMultimedia -- StreamRTSP -- VideoOnly
開啟 example : streaming server

修改 source code 中的 ssid[],pass[]到家裡的 wifi,
Sketch -- Verify/Compile
開始 make,
出現 Error:
misc/elf2bin.linux: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./misc/elf2bin.linux)
看一下自己系統的 libc 版本:
strings /lib/x86_64-linux-gnu/libc.so.6  | grep GLIBC
..
只有列到 GLIBC_2.30
所以是 ubuntu 版本不夠新(20.04)
ref: Error /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found
sources.list 加入
deb http://security.ubuntu.com/ubuntu jammy-security main 
然後 apt update, apt install lib
結果 lib 是很重要的 libary,所以一堆 service 要重開。

之後IDE重 Verify/Compile就 OK 了。

--- 這樣好像會 break distribution,update,upgrade之後,一堆function failed,

硬體接線。

hub 8735 使用 usb-uart 的 5V 就可以驅動了。
所以就順便用 usb-uart 的 5V, GND, TX, RD 接到 板子上。
usb-uart 插入nb,出現 ttyUSB0,
IDE 選 board, port : HUB 8735, ttyUSB0

讓 hub 8735 進入 download mode:

跟接 usb-uart 的四根 pin 的最旁邊的兩 pin : 3.3V, A5 ,短路後,按下正面的 led 旁邊的 button,就會 reboot into download mode.
在 IDE -- script -- upload,開始 build and upload.
IDE log 會出現:
Sketch uses 5054464 bytes (30%) of program storage space. Maximum is 16777216 bytes.
  Enter Flash Mode!
  Start Upload Flash
    Uploading...................upload success
  End Upload Flash
upload 完成,把剛剛的 A5, 3.3V 斷開。
開啟 uart terminal (picocom , 115200),按下正面 reset .. 可以看到開機 log..
    - RTSP -
rtsp://192.168.213.200:
[INFO] 554
開啟 VLC --- Media -- Open Network Stream
填入 rtsp://192.168.213.200:554
play 就可以看到畫面,開啟 VLC 的 codec information :
resolution : 1920x 1080, 30fps



另一種,不用 arduino,用一般mcu programming, gcc build 的方法是 sdk.
這個是 run yolov4 的 example:
20240130 update:

在 linux 的 arduino 安裝hub8735 的 board package 時,版本更新到 4.0.9 了,結果出現 Error,說 ameba_pro2_tools_linux-1.2.13 的 file size 錯,
去 release download gz 後看,果然 json 寫錯了。
後來發現 sha256sum 也錯,只好 fork 自己改,所以那個 json url 要改:
https://raw.githubusercontent.com/checko/HUB-8735/main/amebapro2_arduino/Arduino_package/ideasHatch.json
這樣安裝就 OK 了,所以也做了 pull request,之後應該就會改了吧。
-- size 和 checksum 都錯,有可能是 gz 放錯了,所以還是要等主站確定,ˋ這個只是暫時的方法。


Reatek AMB82 Mini

這個跟 HUB8735 很像,都是用 realtek RTL8735B,但是 GPIO pin 腳好像不一樣。
realtek 也有給他一個 arduino 的 sdk: 用法依樣,把 json 檔的 raw path 寫到 preference...

2024/1/19

Arduino Uno R3

Uno R3 有兩顆 MCU:
  • ATMEGA328P : 主 MCU
  • ATMEGA16U2 : 做 usb - uart 轉換

然後 有 R3 SMD 版,差異是 ATMEGA238P 這一棵由 DIP 改 SMD

另外有一種 CH340 版,就是用 CH340 這棵 usb-uart IC 換掉 ATMEGA16U2,可能有比較便宜吧,還有 CH340 的 baudrate 好像可以比較高。
相容性的話,因尾 Arduino IDE 只把 ATMEGA16U2 視為 usb-uart。並沒有 program 他,所以用起來應該一樣。

實際上也有project 把 ATMEGA16U2 改成 HID : keyboard,但是燒錄就要用 另一塊 arduno,hardware socket 和 dfu program.
如果沒有要動到 ATMEGA16U2,那麼選 便宜的 CH340 版本也行。

2024/1/8

gitlab 16.7 docker run

在名叫 i9rtx3090 的機器上啟動 gitlab-ce (現在的latest 應該是 16.7)
docker run -d --hostname i9rtx3090 --name gitlab -p 8080:80 gitlab/gitlab-ce
因為 gitlab 啟動很慢,所以看一下docker log:
docker logs gitlab
[execute] Running db:schema:load rake task 的時候會久一點。

16.7 版在 create issue 後,browse issue 會出現 hostname 沒有加上 port 的狀況。
如果Docker container 用 80,也就是 -p 80:80 的話就 OK
-- 另外,在 12.10 版沒有這個問題。

16.7 版docker 啟動後,root password 在 /etc/gitlab/initial_root_password 裡面。
所以用
docker exec -it gitlab /bin/bash
進去container 裡面看。
就可以用這個 password 登入 root 了。