Приветствую уважаемый читатель! В этой статье я постараюсь рассказать как мне удалось модифицировать прошивку портативной колонки, при том, что я не являюсь программистом. Наверняка для кого то идея окажется не новой, но когда я столкнулся с этой задачей быстрого ответа не нашел. В конце статьи я запилил видео, если кому окажется лень читать.
![](https://habrastorage.org/webt/q4/uz/_k/q4uz_kqlxnio5yliz-hdlvcifi0.jpeg)
Итак, есть некая портативная колонка (в данном случае DEXP Phill), главный ее недостаток в том, что производитель воткнул в нее орущее на максимальной громкости голосовое меню, которое невозможно отключить либо сделать тише. Что-же разберем посмотрим что внутри.
Динамики и аккумулятор:
![](https://habrastorage.org/webt/-g/rc/0v/-grc0vnbsx8opiu_il2ioctaj4e.jpeg)
Эти две микросхемы — усилители мощности звука (УМЗЧ):
![](https://habrastorage.org/webt/ya/hr/lr/yahrlrd0en_q_tfrab8jazhuo3y.jpeg)
Здесь большая, многоногая микросхема — собственно плеер, внизу контроллер заряда аккумулятора и посередине SPI-flash память 25q40ATIG на 512 кБ (4 мБит):
![](https://habrastorage.org/webt/lc/6h/mn/lc6hmnu-hvnoufpjpcqruisbxgg.jpeg)
Мне кажется логично предположить, что в этой флэшке и зашиты файлы голосового меню, среди прочего. Ок, берем программатор CH341A выпаиваем микросхему и считываем содержимое.
Микросхему можно не припаивать а просто зажать:
![](https://habrastorage.org/webt/0p/za/-k/0pza-klac2wdifxdwid7wanlw1k.jpeg)
Почему именно CH341A? 1) Он читает 25 серию флэшек, 2) стоит ~2USD.
![](https://habrastorage.org/webt/so/_k/tu/so_ktuumnmtesmgn9uve6dlks9y.jpeg)
Итак считав данные мы получили бинарный (bin) файл размером 512 кБ в котором на первый взгляд ничего не понятно:
![](https://habrastorage.org/webt/67/-t/al/67-tal9ptak-u-ebqzse40msh_i.png)
Если кто не знает, то здесь показаны: слева — адреса ячеек памяти, по середине — байты (данные) представленные в 16-ричном исчислении, где максимальное значение FF, или 255 в 10-ричном. Справа редактор подставляет символы ACSII, которые иногда здорово помогают!
Если открыть в hex редакторе любой mp3 файл, а до кучи ещё и погуглить на тему устройства ID3 тэгов становиться понятногде собака зарыта где и как можно искать эти самые mp3 файлы голосового меню.
![](https://habrastorage.org/webt/1i/fc/kv/1ifckvaxq55t77v8vydzxdpqan4.png)
Все mp3 файлы имеющие ID3v2 начинаются с последовательности байт 49 44, поскольку ID3v2 пишется в начале файла — это первый ключ. ID3v1 — пишется в конце — это второй ключ. Мне повезло, то ли благодаря избытку памяти, то ли лени программисты не стали удалять ID3 тэги и байт за байтом я выудил нужные мне файлы. Поясняю: находим начальные и конечные байты, выделяем, копируем в новый hex файл и сохраняем с расширением mp3:
![](https://habrastorage.org/webt/q5/1j/o6/q51jo6kdgtymnwovve_bhmodr9q.png)
С удивлением обнаружил в прошивке множество других голосовых файлов. Например, озвучены цифры, правда на английском, позже понял для чего они нужны: у колонки есть bluetooth и когда она подключена к телефону во время вызова проговаривает входящий номер. Кривая локализация. Кстати, вот с какой чудовищной динамической компрессией выполнена озвучка:
![](https://habrastorage.org/webt/qg/fq/fw/qgfqfweqnmbep4zfnbghshd_h-e.png)
Догадливый читатель, наверное уже понял что делать дальше, есть два пути: изменить громкость у оригинальных файлов, сделать что то типа такого:
![](https://habrastorage.org/webt/_u/k3/69/_uk369j37uvs2v7ao6xg8v7luta.png)
Или заменить на что то более достойное. Я подобрал в бесплатных музыкальных банках новые звуки. Тут главное подогнать под размер заменяемого файла: меньше можно, больше — нет. Хорошо уменьшает размер ресемплирование (например с 44100 -> 22050) и собственно битрейт, но на компромисс идет качество. Далее выполняем всё в обратной последовательности: открываем новые mp3 файлы в hex редакторе копируем их на нужные места в прошивку, сохраняем прошивку, записываем в микросхему, припаиваем микросхему на место, собираем колонку. Profit.
Важное замечание: конкретно в моем случае программатор CH341A смог только прочитать 25Q40ATIG, записать не смог т.к. ее нет в списке поддерживаемых. Поэтому пришлось купить аналог: 25Q40BVSIG с которым всё получилось.
Обещанное видео:
![](https://habrastorage.org/webt/q4/uz/_k/q4uz_kqlxnio5yliz-hdlvcifi0.jpeg)
Итак, есть некая портативная колонка (в данном случае DEXP Phill), главный ее недостаток в том, что производитель воткнул в нее орущее на максимальной громкости голосовое меню, которое невозможно отключить либо сделать тише. Что-же разберем посмотрим что внутри.
Динамики и аккумулятор:
![](https://habrastorage.org/webt/-g/rc/0v/-grc0vnbsx8opiu_il2ioctaj4e.jpeg)
Эти две микросхемы — усилители мощности звука (УМЗЧ):
![](https://habrastorage.org/webt/ya/hr/lr/yahrlrd0en_q_tfrab8jazhuo3y.jpeg)
Здесь большая, многоногая микросхема — собственно плеер, внизу контроллер заряда аккумулятора и посередине SPI-flash память 25q40ATIG на 512 кБ (4 мБит):
![](https://habrastorage.org/webt/lc/6h/mn/lc6hmnu-hvnoufpjpcqruisbxgg.jpeg)
Мне кажется логично предположить, что в этой флэшке и зашиты файлы голосового меню, среди прочего. Ок, берем программатор CH341A выпаиваем микросхему и считываем содержимое.
Микросхему можно не припаивать а просто зажать:
![](https://habrastorage.org/webt/0p/za/-k/0pza-klac2wdifxdwid7wanlw1k.jpeg)
Почему именно CH341A? 1) Он читает 25 серию флэшек, 2) стоит ~2USD.
![](https://habrastorage.org/webt/so/_k/tu/so_ktuumnmtesmgn9uve6dlks9y.jpeg)
Итак считав данные мы получили бинарный (bin) файл размером 512 кБ в котором на первый взгляд ничего не понятно:
![](https://habrastorage.org/webt/67/-t/al/67-tal9ptak-u-ebqzse40msh_i.png)
Если кто не знает, то здесь показаны: слева — адреса ячеек памяти, по середине — байты (данные) представленные в 16-ричном исчислении, где максимальное значение FF, или 255 в 10-ричном. Справа редактор подставляет символы ACSII, которые иногда здорово помогают!
Если открыть в hex редакторе любой mp3 файл, а до кучи ещё и погуглить на тему устройства ID3 тэгов становиться понятно
![](https://habrastorage.org/webt/1i/fc/kv/1ifckvaxq55t77v8vydzxdpqan4.png)
Все mp3 файлы имеющие ID3v2 начинаются с последовательности байт 49 44, поскольку ID3v2 пишется в начале файла — это первый ключ. ID3v1 — пишется в конце — это второй ключ. Мне повезло, то ли благодаря избытку памяти, то ли лени программисты не стали удалять ID3 тэги и байт за байтом я выудил нужные мне файлы. Поясняю: находим начальные и конечные байты, выделяем, копируем в новый hex файл и сохраняем с расширением mp3:
![](https://habrastorage.org/webt/q5/1j/o6/q51jo6kdgtymnwovve_bhmodr9q.png)
С удивлением обнаружил в прошивке множество других голосовых файлов. Например, озвучены цифры, правда на английском, позже понял для чего они нужны: у колонки есть bluetooth и когда она подключена к телефону во время вызова проговаривает входящий номер. Кривая локализация. Кстати, вот с какой чудовищной динамической компрессией выполнена озвучка:
![](https://habrastorage.org/webt/qg/fq/fw/qgfqfweqnmbep4zfnbghshd_h-e.png)
Догадливый читатель, наверное уже понял что делать дальше, есть два пути: изменить громкость у оригинальных файлов, сделать что то типа такого:
![](https://habrastorage.org/webt/_u/k3/69/_uk369j37uvs2v7ao6xg8v7luta.png)
Или заменить на что то более достойное. Я подобрал в бесплатных музыкальных банках новые звуки. Тут главное подогнать под размер заменяемого файла: меньше можно, больше — нет. Хорошо уменьшает размер ресемплирование (например с 44100 -> 22050) и собственно битрейт, но на компромисс идет качество. Далее выполняем всё в обратной последовательности: открываем новые mp3 файлы в hex редакторе копируем их на нужные места в прошивку, сохраняем прошивку, записываем в микросхему, припаиваем микросхему на место, собираем колонку. Profit.
Заключение
Важное замечание: конкретно в моем случае программатор CH341A смог только прочитать 25Q40ATIG, записать не смог т.к. ее нет в списке поддерживаемых. Поэтому пришлось купить аналог: 25Q40BVSIG с которым всё получилось.
Обещанное видео:
Комментарии (6)
MadLord
16.05.2018 06:01Спасибо за статью. У меня такая колонка. Обращался к производителю с проблемой орущего голоса — сказали громкость не уменьшается. Эх, жаль нет под рукой такого программатора. А ST-Link не подойдет для этого?
s22 Автор
16.05.2018 12:20Я честно не силён в программаторах. Знаю, что достаточно легко SPI программатор реализуется на Arduino.
max_rip
16.05.2018 07:28Готовым файликом поделитесь?
s22 Автор
16.05.2018 12:18Конечно, вот ссылка: https://drive.google.com/file/d/1ic5GVw8qOPPndMIhF4jZ1RUpHSqITl6E/view
Также ссылка есть в описании под видео на YouTube.
dmitryrf
Кодек в колонке без проблем принял новый формат? А то бывает, что работает только один единственный вариант.