Відновлення прошивки за допомогою USB UART
Процедура оновлення прошивки
Оновлення пристроїв Xiong Mai було розглянуто в окремій статті, тут же я поділюся додатковими відомостями, які можуть виявитися корисними при відновленні, коли щось пішло не так (відключили світло в процесі оновлення, була залита несумісна прошивка або був інший збій).

Оновлення пристрою можна зробити двома способами: пристрій самостійно завантажує прошивку та оновлюється, або користувач знаходить свіжу версію, завантажує через VMS або Web-інтерфейс, далі оновлення йде за тим самим сценарієм.
Для мінімізації проблем, у прошивці міститься спеціальний файл InstallDesc
, в якому міститься ідентифікатор платформи "Hardware"
, за яким пристрій перевіряє, чи підходить йому завантажена прошивка, порівнюючи його вміст із файлом ProductDefinition
усередині прошивки.
Також є окреме поле "Vendor"
, яке зазвичай містить "General"
.

Поле "Vendor"
введено для виробників обладнання, які крім власної збірки, додають також додаткові функції, особливі параметри роботи або просто змінюють заводський розподіл пам’яті. Таким чином, здійснюється найпростіший захист копірайту, а також від заливки несумісної прошивки.
Якщо обидва ці поля збіглися, запускається процедура оновлення, в іншому випадку видається повідомлення про помилку.
Прошивка становити собою перейменований .zip архів, який містить кілька .img файлів – розділів DUMP-a зі спеціальним заголовком в 64 байти, а також вже згадуваний файл-описувач InstallDesc
. Приклад типового вмісту прошивки:

У реєстраторів є розділ з логотипом logo-x.cramfs.img
Оновлення здійснюється за розділами, тому у разі переривання процедури оновлення, пошкодженим виявляється лише один розділ.u-boot.bin
– це сам завантажувач u-boot
, прошивається першим і майже завжди залишається цілим завдяки малим розмірам. Крім процедури запуску, u-boot
містить процедури виведення на екран логотипа (у реєстраторів), а також – найважливіше – скрипти відновлення модулів прошивки.
Саме тому ми й бачимо на екрані збійного пристрою матрац або логотип виробника.
Якщо логотип не пропадає, а пристрій не переходить у робочий режим, значить пошкоджений один із блоків прошивки, але сам завантажувач цілий, і пристрій можна відносно просто і недорого відновити.
При пошкодженому завантажувачі ми отримуємо повну “цеглу”, описуваний тут метод вже не застосовується, відновлювати доведеться на програматорі, в цій статті його розглядати не будемо.
Підключаємо USB UART
Спілкування із завантажувачем проводиться з консолі командами, які подаються через спеціальний інтерфейс налагодження – UART. Як консоль (термінал) зручніше використовувати Putty, хоча згодиться навіть вбудований у Windows гіпертермінал.
Щоб мати змогу надсилати команди з термінала, нам знадобиться USB UART перетворювач.
Найпоширеніший – це перетворювач на базі мікросхеми CH340G. Для відновлення одного пристрою його буде достатньо, але якщо ви професійно займаєтеся ремонтом, краще придбати перетворювач на базі мікросхеми FT232RL, він більш надійний і не так схильний до перешкод у лінії.

Під’єднавши UART перетворювач, отримаємо в системі додатковий послідовний COM-порт, номер якого потрібно дізнатися в диспетчері пристроїв. Цей номер вказуємо у програмі-терміналі, а також задаємо інші параметри порту: швидкість 115200, парність ні, стоп. біт 1.
Для підключення з’єднуємо мінусовий (“земляний”) провід пристрою із загальним (GND) проводом перетворювача, RX пристрою з’єднуємо з TX перетворювача, а RX відповідно з TX.
Включаємо пристрій та спостерігаємо таку картинку:

Це лог завантаження. На коротку мить на екрані промайне запрошення Press Ctrl+C to stop autoboot
. Потрібно зловити цей момент та натиснути комбінацію клавіш Ctrl+C
або заздалегідь утримувати комбінацію клавіш Ctrl+C
, після чого ми потрапляємо до командного інтерфейсу завантажувача (також може бути інша комбінація).
Даємо команду printenv
, це виведе на екран змінні оточення завантажувача та повідомить нам додаткову інформацію про піддослідне.
Нас поки що цікавлять два параметри:

Їх можна змінити командою setenv
або підставити комп’ютер IP адресу з serverip на час відновлення.
TFTP сервер
Погравши з командами, можливо, ви захочете піти далі і відновити пристрій.
Для цього нам знадобиться ще одна програма – TFTP сервер, я рекомендую tftpd64.
Встановлюєте його та налаштовуєте згідно з картинкою.

Резервне копіювання – наше все
Тепер підключаємо нашу багатостраждальну камеру/реєстратор мережним кабелем до тієї ж мережі, що й комп’ютер із програмою термінала та TFTP
сервером.
Перед експериментами потрібно зробити резервну копію (DAMP). Для цього потрібно дізнатись розмір флеш-пам’яті пристрою. У цьому нам допоможе команда sf probe 0
.
U-boot> sf probe 0
8192 KiB hi_fmc at 0:0 is now current device
Звідси видно, що розмір флеші – 8192 кб, що становить 0x800000h у шістнадцятковій системі. (Для флеші 16384 кб це число буде 0x1000000h).
Ще потрібно знати адресу доступної оперативної пам’яті, щоб скопіювати DAMP в пам’ять або завантажити туди блоки. Дайте команду printenv
і перегляньте змінну bootcmd=
. В самому кінці завжди є команда bootm
і адреса пам’яті. У нашому випадку bootm 0x82000000
(бувають також 0x42000000
)
Тоді команди для резервної копії будуть такими:
setenv serverip 192.168.1.175
встановлення IP адреси нашого комп’ютера (не обов’язково, якщо вже задали IP з serverip
)setenv ipaddr 192.168.1.10
зміна IP-адреси пристрою (не обов’язково, якщо знаходиться в тій же підмережі, що і ПК)sf probe 0
звернення до SPI флешіsf read 0x82000000 0x0 0x800000
копіювання вмісту флеш в оперативну пам’ятьtftp 0x82000000 dump.bin 0x800000
передача DUMP-a на tftp сервер
Після цього в папці tftpв64
сервера з’явиться файл dump.bin
, який містить повну резервну копію.
Відновлення
Тепер знадобиться файл прошивки під наш пристрій. Сподіваюся, ви записали номер пристрою з віконця Info, коли пристрій ще працював? Якщо ні, підібрати відповідну прошивку можна за маркуванням на пристрої.
Завантажуємо прошивку, відкриваємо архіватором і виймаємо всі файли в папку сервера TFTP
(в мене D:\tftpd64
).
Тепер залишилося небагато, даємо в консолі наступні команди:run dc
(команда для завантаження файлу custom-x
)run du
(команда для завантаження файлу user-x
)run dr
(команда для завантаження файлу romfs-x
)run dw
(команда для завантаження файлу web-x
)reset
(команда для перезавантаження пристрою)
Для завантаження логотипа використовується команда run dl
Зазвичай це дозволяє відновити працездатність у разі псування одного з модулів.
Якщо файли не завантажуються з tftp сервера (в консолі циклічні спроби), то швидше за все заважає брандмауер Windows – відключіть його або додайте tftpd у винятки.
прошу допомоги по 5222l -a
якщо э можливiсть напишить в телегу @Ivan_Patlan
Вітаю. По камері D-Link DCS-5222l. Якщо вона не завантажується або не горить індикатор, то спробуйте наступне: при вимкненому живленні затисніть ресет, далі не відпускаючи ресет, подайте живлення і продовжіть тримати ресет ще секунд 10-15. Після цього зайдіть на камеру за стандартною адресою 192.168.0.20 і там буде вікно оновлення прошивки. Завантажте прошивку та дочекайтеся закінчення процесу. Тепер ваша камера має запрацювати штатним чином.