В данной статье речь пойдет о Wi-Fi мини видеокамере из семейства А9 от китайских производителей. Цель исследования этих камер – расширить возможность их применения, которая ограничена использованием только стандартных приложений для мобильных устройств на базе Android или iOS.
О камерах семейства А9
Стоимость данных видеокамер варьируется от 2$ до 4$ (в зависимости от производителя, типа процессора, наличия ИК подсветки и др.). На известной экспресс торговой площадке её можно найти по запросу «мини-камера A9». Ссылка на англоязычный форум по теме разбора камер А9 – https://community.home-assistant.io/t/popular-a9-mini-wi-fi-camera-the-ha-challenge/230108
Внешний вид моих подопытных камер представлен на фотографии ниже (и, да, внутри они немного разные).
Типовая видеокамера А9 имеет встроенный аккумулятор, а внешнее питание подается через разъем microUSB. Она может обеспечивать два режима работы с сетью: как точка доступа (AP), и как клиент сети (STA). Режим работы настраивается через стандартное приложение на смартфоне. По умолчанию всегда включен режим АР. IP адрес для камеры в режиме АР может отличаться в зависимости от производителя, у моих подопытных – 192.168.1.1. При проведении исследований этих камер использовалось приложение FtyCamPro рекомендованное производителем, хотя в «интернетах» пишут, что работают эти камеры и с более известным приложением Little Stars. Пользовательский обзор в достаточном объеме представлен на YouTube по запросу «Подключение китайской камеры А9».
Рассматриваемые здесь дешевые видеокамеры построены на основе процессора TXW806-840. Ссылка на сайт производителя чипа TWX806 (только китайский язык) https://www.taixin-semi.com/. В продаже имеются также и аналоги с процессором BK7231, которые несколько дороже. Электронная часть камеры выглядит вот так:
Структурная схема процессора, взятая из официального даташита показана ниже.
Согласно данным от производителя TXW806 - это высокоинтегрированный небольшой многорежимный чип для IoT с частотой 2,4 ГГц. Чип включает в себя 32-битный микроконтроллер, встроенный MJPEG (поддерживает VGA/720P), имеет DVP интерфейс, высокоскоростной хост USB2.0, хост SDMMC, ведомое устройство SDIO2.0, интерфейс RMII MAC, ведущее устройство SPI, UART, IIC, IIS, IR Send/Receive, PWM, GPIO и ADC/DAC, поддерживают запуск программ на SPI Flash. Базовый модуль Wi-Fi TXW806 реализует технологию мультиплексирования с ортогональным частотным разделением каналов (OFDM), обратно совместима с технологией расширения спектра прямой последовательностью (DSSS), дополнительной кодовой манипуляцией (CCK) и поддерживает протокол IEEE 802.11 b/g/n. Wi-Fi поддерживает стандартную полосу пропускания 20 МГц и узкую полосу пропускания 5 МГц/10 МГц, обеспечивая скорость физического уровня 72,2 Мбит/с. Имеет усилитель мощности, малошумящий усилитель LNA, радиочастотный балун, антенный переключатель, модуль управления питанием и т. д. Поддерживает RTOS и сторонние операционные системы, а также предоставляет открытую и простую в использовании среду разработки и отладки.
Используется этот чип в основном для беспроводных аудио и видео устройств, аэрофотосъемки, видео глазков для домофонов и т.п. Богатый функционал, за такую стоимость, не правда ли? От себя могу похвалить этот чип за его стрессоустойчивость, которую он проявил во время пыток его паяльником и тестером.
Безоперационное определение сознания камеры
До препарирования камеры было проведено сканирование доступных портов утилитой nmap в Ubuntu, при этом камера была подключена к роутеру в режиме STA. По результатам сканирования, были определены открытые порты камеры:
PORT | STATE | SERVICE |
68/udp | open|filtered | dhcpc |
7070/tcp | open | rtsp/realserver |
32108/udp | open|filtered | unknown |
7070/tcp open rtsp
| fingerprint-strings:
| RTSPRequest:
| RTSP/1.0 200 OK
|_ Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
Из доступных для чтения видеопотока оказался порт 7070 по которому предоставляется потоковое видео и аудио по RTSP. Первые попытки получить видео посредством ПО работающего с протоколом RTSP не принесли успеха. Для этого использовались VLC player и openRTSP под Ubuntu (http://www.live555.com/openRTSP/).
На запрос: /home/live/testProgs# ./openRTSP ‑T 7070 rtsp://192.168.1.1:7070
Камера отвечала:
Hidden text
Created new TCP socket 3 for connection
Connecting to 192.168.1.1, port 7070 on socket 3...
...remote connection opened
Sending request: OPTIONS rtsp://192.168.1.1:7070 RTSP/1.0
CSeq: 2
User-Agent: ./openRTSP (LIVE555 Streaming Media v2023.11.30)
Received 76 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
Sending request: DESCRIBE rtsp://192.168.1.1:7070 RTSP/1.0
CSeq: 3
User-Agent: ./openRTSP (LIVE555 Streaming Media v2023.11.30)
Accept: application/sdp
Received 35 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 404 Not Found
CSeq: 3
Итогом такого общения был ответ от камеры:
Failed to get a SDP description for the URL "rtsp://192.168.1.1:7070": 404 Not Found
При использовании VLC результат был примерно такой же.
Еще отмечу, что камера в режиме STA интенсивно соединялась со сторонними серверами по UDP, IP которых: 170.106.50.82, 146.56.226.66 и 35.156.204.247. Это общение пришлось закрыть фаерволом, на всякий случай. Кстати, фаервол был включен на эти IP уже после тестирования с помощью утилиты openRTSP, на случай если при отсутствии соединения с этими серверами камера будет уходить в глухую оборону и в полное молчание.
P.S. Печально конечно, но IP адреса сторонних серверов потом меняются.
Вскрытие
Следующим шагом исследования было вскрытие корпуса и привлечение паяльника. На фотографиях ниже представлены PCB двух моих камер. Слева уже распаянная для работы, справа – новая, не тронутая. Обратите внимание на контактные площадки.
Да, и давайте камеру слева назовем FTYB, а камеру справа – BATC. Не спрашивайте почему. Дальше, надеюсь, будет понятно.
Контакты на плате слева имеют следующие обозначения: RX_PA9, TX_PA10, PA8, GND и CEN (chip enable). На плате справа аналогичные контакты обозначены несколько иначе: HCK, без обозначения, HDA, GND и nRST. В даташите на процессор TXW806 есть следующая информация:
Обозначение вывода | Тип | Назначение |
PA8 | I/O | LEDTMR2_PWM_OUT, ADKEY1_N0, ADKEY0_P1, ADKEY1_P0, TK8, LED_SEG4, QSPI_CLK |
PA9 | I/O | ADKEY0_P1, ADKEY1_P0, TK9, LED_SEG9, QSPI_IO2 |
PA10 | I/O | ADKEY0_P1, ADKEY1_P0, TK10, LED_SEG8, QSPI_IO1 |
CHIP_EN | I | Chip enable:0:Chip off, 1:Chip enable |
И таблица о порядке подключения чипа к программатору:
Кроме того, производитель сообщает, что имеется два интерфейса отладки: PA9 (DebugIO) и PA10 (DebugCLK) с внутренним сопротивлением подтягивающего резистора 10 кОм. Когда функция отладки не используется, интерфейс отладки можно использовать как обычный GPIO, и его необходимо настроить с помощью программного обеспечения. Во время компоновки печатной платы должны быть зарезервированы контрольные точки на плате, чтобы облегчить отладку. В то же время PA8, CHIP_EN также необходимо зарезервировать для вспомогательного тестирования.
С помощью переходника USB-TTL (в моем случае на микросхеме CP2102) камера была подключена к последовательному порту компьютера. Кстати! Контакт TX на плате это PA8, а на другой камере TX это HDA! Общение с платой осуществлялось посредством Putty с настройкой COM порта на скорость 1 000 000 (106) бот, все остальные параметры по умолчанию. Было задействовано три точки: GND, PA8 и PA9. Скорость взаимодействия определена опытным путем. На стандартной максимальной скорости 512 000 бот и менее в терминал сыпались нечитаемые знаки. Думаю, что весь лог загрузки приводить не целесообразно, здесь акцентирую внимание лишь на некоторых моментах. В логах загрузки и работы камеры содержатся наименование сборки и дата сборки ПО, наименование клиента (станции), пароль, наименование прошивки, калибровочные параметры для видео сенсора, настройки для АЦП, для TF (SD) карты памяти (пытается ее найти, создать там рабочие папки для записи видео и фото), настройки сети Wi-Fi (MAC, FLAGS, UP LINK_UP ETHARP IGMP, ip address 192.168.1.1, gateway, net mask), информация о состоянии системы (температура чипа, рабочая частота, свободная память, работающие процессы и уровни загрузки ими ЦП), например:
• начало загрузки, с наименованием сборки ПО выглядит так:
Hidden text
** hgSDK-v2.2.0.7-22619, app-0, build time: Apr 13 2023 10:15:54 **
------- system restart fault -----------
------- lvd fault -----------
---------------------------------------
[1]time=0, tick=1
…
get flash addr:fd000 size:4096,
[9]col_flag:1
[9]get_parse_cloud_id:126
[10]selfId:FTYB931188RLTOV:15
[10]col_flag:1
[10]col_flag:2
[10]get_parse_cloud_id: 126
[11]parId: WRAWEJ: 6
[IpcCfgInit][ 448] 1:616 --> get from ezConfig FTYB931188RLTOV:ZZZZZ:
[IpcCfgInit][ 462] 0 --> get from ezConfig FTYB931188RLTOV:ZZZZZ: <-- FTYB931188RLTOV – имя камеры и имя точки доступа
• сообщение о разрешении матрицы сенсора:
Hidden text
[148] SENSR ident ok: 640*480
[148] csi set size ====>640*480
• информация о том, что открытым является порт 7070:
Hidden text
t_s> spook init
listening on tcp port 7070
port:7070 fd:3
jpeg set_output
live start_block
live set_path /webcam <‑- /webcam – имя папки для работы по протоколу rtsp!
live set_track jpeg_dvp
jpeg get_framerate
jpeg set_running: 1
live end_block
len:1200
Соответственно, полный путь к устройству для приема потокового видео будет rtsp://192.168.1.1:7070/webcam
• данные о соединении с сетью:
Hidden text
[sys_wifi_init][ 419] CONFIG_UMAC4 ---- yes
-------ssid: FTYB931188RLTOV, key: 12345678
[52] lmac_bgn_lo_freq_set: 2457
[54] vif2 state WPA_DISCONNECTED -> WPA_COMPLETED
…
network interface: w0 (Default)
MTU: 1600
MAC: d8 83 32 8e a8 24
FLAGS: UP LINK_UP ETHARP IGMP
ip address: 192.168.1.1
gw address: 192.168.1.1
net mask: 255.255.255.0
network interface: lo
MTU: 0
MAC:
FLAGS: UP LINK_UP
ip address: 127.0.0.1
gw address: 127.0.0.1
net mask: 255.0.0.0
• данные о состоянии системы:
Hidden text
local:d8:83:32:8e:a8:24
chip-temperature: 28
freq:2457, bg_rssi:-73
gain_table:0
cca: -63, -53, -55
tx: txq:0, ps:0, tx_stat_q:0,
tx dma:12, total tx:12, retry:32, tx lost:3, tx err:0
rx: rx irq:148
rx dma free: 17232
rx err: dma err:7, phy err:6714, rx frm err:467,
• данные о запущенных процессах:
Hidden text
[6244]ip:101a8c0 freemem:40224
[6244]---------------------------------------------------
[6245]Task Runtime Statistic, interval: 6244ms
[6245]PID Name %CPU(Time) Stack Prio
[6246]--------------------------------------------------------------------------------------
[6247] 1 idle_task 94%(5930) 1024 61
[6247] 2 timer_task 0%(1) 800 5
[6248] 3 MAIN 2%(173) 2048 43
[6248] 4 lmac tx 0%(3) 640 27
[6249] 5 lmac tx status 0%(1) 512 27
[6250] 6 lmac beacon task 0%(9) 640 26
[6250] 7 lmac rx 0%(11) 1024 19
[6251] 8 lmac_bgn_test 0%(1) 512 51
[6251] 9 lmac main 0%(5) 1024 43
[6252]10 hw 0%(21) 2048 26
[6253]12 tcpip_thread 0%(2) 1024 49
[6253]13 hg_sdh_test 0%(11) 1024 43
[6254]14 hgpdm_sample_task 0%(61) 1024 43
[6255]17 ThLstn 0%(5) 1024 49
[6255]20 ThSysMon 0%(5) 3072 49
[6256]---------------------------------------------------
[6256]WARNING: work 0x20004248 (func:0x1800438c) use 12 ticks
host->flags:14
host->flags:14
При подключении смартфона и открытии приложения FtyCamPro:
• настройка соединения со смартфоном:
Hidden text
[26499]lmac_bgn_add_sta: if:2, aid1, addr:b4:хх:хх:хх:хх:58 ß хх – это для конфиденциальности