Как отвязать камеру от Ростелекома
Биг Техно Блог · Практика
Открывали второй магазин в Сочи, видеонаблюдение собирали из того, что нашлось в хозяйстве. Две камеры оказались от Ростелекома: включаются, в сети видны, а забрать с них видео привычным способом не выходит. Вечер работы — и они снимают.
- Hi3516CV300
- OV2735
- 128 МБ
- ONVIF + RTSP
Камеры оператора рассчитаны на его же сервис, и наши это подтвердили. Вопрос был простой: можно ли привести весь зоопарк к общему знаменателю, чтобы каждая камера работала и приносила пользу, или проще выбросить. Оказалось — можно, и без договоров с оператором.
Ниже весь порядок на примере одной такой камеры: чем разговаривали с платой, как перехватили загрузчик, что сохранили до первой записи, какие файлы понадобились и чем проверяли результат. Всё, что нужно для повтора, есть в этом тексте.

Что вообще за камера
На корпусе написано IPC322SR3-VSPF28-C, производитель — Uniview. Внутри процессор HiSilicon Hi3516CV300, сенсор OmniVision OV2735 и 128 мегабайт памяти.
Камера включалась и отвечала в сети — и на этом всё. Ни веб-интерфейса, ни двух стандартных способов забрать картинку: ONVIF (общий язык, на котором камеры и регистраторы разных марок договариваются друг с другом) и RTSP (по нему идёт сам видеопоток).
Разница тут важная: ответ камеры по сети доказывает только то, что она включена, а пустой экран в браузере ещё не значит, что сенсор умер. Железо живое, проблема в софте. А чтобы добраться до софта, надо попасть в загрузчик.
Что понадобилось
Память камеры при этом через колодку программатора не программировалась: команды шли по служебным проводам, файлы — по сети, записывал всё сам загрузчик.
Три провода
На плате есть площадка J4 — четыре позолоченных отверстия рядом с крупным чёрным элементом SMCJ 58CA.

Нужны три из четырёх: земля, приём и передача. Правило простое: что передаёт у камеры — идёт в то, что принимает у переходника, и наоборот.

Питание с переходника на камеру не подаётся вообще: камера кормится от PoE, переходник — от USB. Паять и переставлять провода — только когда отключено и то, и другое. А отпаивать их каждый раз не надо: чтобы перезагрузить камеру, хватит выдернуть сетевой кабель.
Ловушка: на плате написано 3.3V, а на выходе 5 вольт

Особенность известная: у чёрных плат CH341 стабилизатор на 3,3 вольта есть, но сама микросхема может питаться от 5. Это описано в документации проекта flashrom, у нас подтвердилось измерением. Повторяете с нуля — проще взять переходник с заявленным и проверенным уровнем 3,3 вольта. Мы работали с тем, что лежало на столе.

Обесточили всё, приподняли вывод питания микросхемы над площадкой, отделив от пятивольтовой линии, и посадили на выход стабилизатора 3,3 вольта. Убедились, что поднятая ножка ничего не касается, подали USB, померили снова — 3,3. И только после этого подключили провод к камере. Переставить провод на площадку «3.3V» вместо доработки нельзя: она не передаёт команды, это просто питание.
Как поймать загрузчик
Загрузчик — маленькая программа, которая стартует до основной системы. У неё есть окно в пару секунд после включения, когда она слушает клавиатуру. Не успел — загрузилась обычная система, и всё сначала.
Настройки порта: 115200 8N1. Переходник оставляем в компьютере, открываем COM-порт, включаем запись журнала. Передёргиваем только сетевой кабель камеры и с первых строк шлём Ctrl+B короткой серией, пока не появится приглашение hi3516cv300-vc #.
Потерянное время было именно здесь: мы отключали USB вместе с питанием камеры, и пока Windows заново находила переходник, камера успевала проскочить своё окно. А молчание в терминале приняли за плохую пайку, хотя пайка была нормальная. Светодиод доказывает только наличие питания, строки в терминале — что мы слышим камеру. И лишь ответ на команду доказывает, что камера слышит нас.
Сначала бэкап. Полный
Правило простое: пока не сохранил то, что есть, ничего не стирай. Выпаивать память не пришлось — загрузчик прочитал её сам, файлы ушли на компьютер по сети.
Читали восемь кусков по 16 мегабайт и склеивали в один файл на 134 217 728 байт. Для каждого сверяли контрольную сумму, посчитанную камерой, с суммой полученного файла — иначе «файл сохранён» ничего не значит. Отдельно сохранили служебную область, настройки загрузчика и проверку на сбойные блоки: их не нашлось. Передача сначала зависала на больших пакетах — вылечилось уменьшением блока TFTP до 512.
Прошивка и чужой серийник
За основу взяли готовый комплект прошивки для этой модели — до нас эту камеру разбирали на Mixatronik, автору спасибо за исследование. Сами файлы мы не выкладываем: чужой бинарник производителя раздавать со своего сайта неправильно. Комплект ищется по названию модели IPC322SR3-VSPF28-C и версии прошивки — у нас встала GIPC-B6103.16.41.230404.
Нужны три файла, все они кладутся в корень TFTP-сервера, откуда камера заберёт их сама:
u-boot.bin— новый загрузчик, пишется первым и вручную;uimage.bin— ядро системы;program.bin— основная программа камеры.
Плюс manuinfo.txt — паспорт камеры. Его в комплекте брать нельзя, собирать придётся свой; как именно — сразу ниже.
Порядок такой: загрузили в оперативную память новый загрузчик (u-boot.bin), сверили сумму, записали, прочитали обратно и сверили ещё раз. Перезапустились уже в него и дали update all — он сам забрал по сети uimage.bin и program.bin и разложил по местам. Прочитали записанное, сверили с исходными файлами.
И вот тут главная ловушка всей затеи.
Поэтому файл надо собрать свой. Структура вот такая — разделители @@, ##, %% и $$ обязательны, порядок полей менять не нужно:
@@
DEVICE_NAME:IPC322SR3-VSPF28-C
DEVICE_SERIAL_NUMBER:>твой серийный номер
MAC_ADDRESS:>твой мак адрес
MANUFACTURING_DATE:>дата производства с наклейки
VENDOR_NAME:UNIVIEW
##
REGION_CODE:>код региона из своего файла
BUILD_INFO:LENS-4801C086;ENC-0302C19Y;SEN-0302C1HW
CUSTOMER_CODE:>код заказчика из своего файла
TEST_TRACKING_NUMBER:>номер из своего файла
E_LABEL_VER:1.20
PROTOTYPE_NAME:IPC322SR3-VSPF28-C
%%
LANGUAGE:8,1
ACTIVE_CODE:>твой код активации
$$Значения полей в вашем экземпляре могут отличаться: за основу берите паспорт своей камеры, а не чужой.
MAC берётся с наклейки на камере, производственный серийный номер — из кода Data Matrix там же (номер оператора и производственный номер Uniview — не обязательно одно и то же). Чужие дату производства и код активации не переносим.
Строка BUILD_INFO — профиль железа: объектив, кодер, сенсор. Наше значение проверено на нашей связке платы и сенсора OV2735, на другой ревизии оно может отличаться.
Команды в загрузчике
Адреса и размеры — от нашей конфигурации, значения в угловых скобках подставляете свои. Каждая проверка — отдельный шаг: не совпала сумма, к записи не переходим.
Сеть и чтение первого куска памяти:
setenv serverip <IP компьютера>
setenv ipaddr <свободный IP для камеры>
setenv ethaddr <MAC своей камеры>
setenv tftpblocksize 512
ping <IP компьютера>
mw.b 0x82000000 0xff 0x1000000
nand read 0x82000000 0x00000000 0x1000000
crc32 0x82000000 0x1000000
tftp 0x82000000 nand-00000000.bin 0x1000000Так же читаются ещё семь кусков со смещений от 0x01000000 до 0x07000000. В других сборках загрузчика синтаксис tftp отличается — сначала help tftp.
Служебная область отдельно:
mw.b 0x82000000 0x55 0x400000
nand read.oob 0x82000000 0x0 0x400000
crc32 0x82000000 0x400000
tftp 0x82000000 nand-oob.bin 0x400000Новый загрузчик — только после проверенного бэкапа:
mw.b 0x82000000 0xff 0x100000
tftp 0x82000000 u-boot.bin
crc32 0x82000000 0x100000
nand erase 0x0 0x100000
nand write 0x82000000 0x0 0x100000
nand read 0x82100000 0x0 0x100000
crc32 0x82100000 0x100000Обе суммы — до записи и после чтения обратно — должны совпасть. Дальше reset и снова Ctrl+B, уже в новый загрузчик. Там заново задаём сеть, сохраняем saveenv, кладём файлы прошивки в корень TFTP-сервера и даём update all. В конце — свой паспорт и перезапуск:
manuinfo manuinfo.txt
config ethaddr <MAC своей камеры>
saveenv
resetЛогин и пароль после прошивки — заводские. Смените сразу, до того как камера окажется в общей сети.
Что проверили
Одного успешного входа мало, поэтому камеру перезапустили и проверили заново:
Подключение к регистратору Dahua
Дальше всё обычно: камера и регистратор в одной сети, регистратор добавляет её как стороннюю по ONVIF. В меню это ручное добавление: протокол ONVIF, адрес камеры, порт 80, RTSP-порт 554, логин и пароль от самой камеры. Адреса потоков — rtsp://IP-камеры/media/video1 и /media/video2. Названия пунктов в меню зависят от версии прошивки регистратора и разобраны в его инструкции, но набор значений везде один и тот же — он весь перечислен выше.
Итог
Выпаивать память и писать прошивку с нуля не пришлось. Вся работа — три аккуратно припаянных провода, нюанс с напряжением, перехват загрузчика и перенос подходящей системы. Вечер. Камера висит и снимает.
Вторую камеру от Ростелекома прошили тем же порядком — она тоже работает. Все замеры, фотографии и контрольные суммы в статье относятся к первой.