• Внешний USB-ЦАП-Аудиопроцессор CDD-010 можно купить

ADAU1452 запись параметров в EEPROM

josaami

New member
Доброго времени суток всем!

Занимаюсь над одним интересным проектом:
в основе adau1452, 8 каналов.
на скрине показан один канал, остальные один в один.

суть в следующем:
есть пульт для настройки этого девайса, который позволяет изменять частоты фильтров, громкость, задержку в каждом канале и т.д.
собран будет на stm32. программу практически написал, все меняет, все регулирует, все гуд.
но суть еще и в записи этих изменений в eeprom, чтоб при старте не настраивать все повторно.
предполагается, что таких девайсов будет много и настроивать каждый при включение питания, выглядит как то так себе.

подскажите, плис, как можно сохранять все эти изменения в eeprom ЧЕРЕЗ DSP? т.е. stm-ка не имеет прямого доступа к eeprom, подключается через i2c к dsp.
я вижу как это делает sigmastudio, но этот способ не совсем подходит.
она стирает полностью eeprom и потом пишет все заново в нее.
т.е. шлет команду g_Erase.
может кто знает как можно стирать отдельно страницу?
можно, конечно, делать как sigma, но я боюсь у меня в stm-ке не хватит памяти, чтоб хранить еще и прогу с параметрами для dsp.
1691529373912.png
 

josaami

New member
Всем доброе время суток!

Запись в eeprom частично реализовал.
В целом все изящно и главное влезло в stm-ку.
Сделал так:
беру hex файл, который генерит sigma при записи в eeprom. написал мелкую прогу для разбиения этого hex-а на массивы по 256 байт.
эта прога вызывается при каждой компиляции проекта в keil-е.

зная адрес каждого элемента схемы dsp (сигма так же генерит этот h-файлик), вычисляю в каком массиве и где именно хранятся данные, которые нужно изменить (скажем громкость, параметры фильтров и т.д.).

перед записью в eeprom стираю контрольную сумму в массиве, чтоб паник менеджер не падал в обморок и давал стартовать проге.
ну как бы и все. если бы не одно но...

некотороым элементам сигма присваивает весьма специфический адрес. например регулятор громкости имеет адрес 29, что есть понятно и легко находится в массиве. формла не сложная:
от адреса вычитаю 10 (это некое смещение от начала 0-го масива. хз что это, но так сигма делает. 6 адресов заняты под заголовок, что есть остальное н - не знаю).
затем умножаю на 4, потому как 32-битные данные и делю на 256 - размер массивов.
дальше вычисляю где в массиве хранятся данные этого элемента.

а вот инвертор (на скрине его нет, он уровнем выше) имеет адрес 3192. и вот это уже мягко говоря не понятно.
может кто то сталкивался с таким или видел информацию как получается это адрес?
если попробовать сделать вычисления массива, то получается 49 массив, а их всего 25.
т.е. для таких адресов эта формула не подходит.

помогите, плис!!!
 
Верх