Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45/M10
Не инициализируется аудиокодек AC97C
sasamy
Добавлено 11.02.2011 12:37 Редактировалось 11.02.2011 12:38 Сообщение: 11
sasamy
4.70

Пункты: 77331
Регистрация: 14.08.2009
Цитата
Оказалось - всё гениальное просто, всё работает. Проблема в том, что нога reset ALC203 не заведена на GPIO пин контроллера и, естественно, аппаратный сброс ему устроить не получается.


Все еще проще чем вы думаете - g45/m10 может управлять линией NRST поэтому никаких GPIO не нужно, к тому же ALC203 недостаточно просто установить сброс на линии reset.
ALC203 Data Sheet, 9.3 Reset, p. 37

Цитата

The AC97 controller should drive SYNC and SDATA_OUT low during the period of RESET# assertion to guarantee that the
ALC203 has reset successfully.


Все это есть в бутсрапе с SD
Код

const struct pio_desc ac97_pio[] = {
{"AC97FS", AT91C_PIN_PD(8), 0, PIO_DEFAULT, PIO_OUTPUT},
{"AC97TX", AT91C_PIN_PD(7), 0, PIO_DEFAULT, PIO_OUTPUT},
{(char *)0, 0, 0, PIO_DEFAULT, PIO_PERIPH_A},
};

.....
pio_setup(ac97_pio);

/* protect against reset */
writel(AT91C_RSTC_KEY_UNLOCK,
AT91C_BASE_RSTC + RSTC_RMR);

/* NRST low - reset alc203 */
writel(AT91C_RSTC_KEY_UNLOCK | AT91C_RSTC_EXTRST,
AT91C_BASE_RSTC + RSTC_RCR);

while(!(readl(AT91C_BASE_RSTC + RSTC_RSR) & AT91C_RSTC_NRSTL))
;

/*
* Enable External Reset
*/
writel(AT91C_RSTC_KEY_UNLOCK
| AT91C_RSTC_URSTEN, AT91C_BASE_RSTC + RSTC_RMR);


Но почему-то все равно нестабильный сброс (похоже я не правильно понял даташит g45), в этом же бутсрапе есть сброс кодека для платы m10 - надо попробовать оттуда списать.
Спуститься к концу Подняться к началу
Персональная информация
Aviator
Добавлено 11.02.2011 12:46 Сообщение: 12
Aviator
0

Пункты: 844
Регистрация: 10.02.2011
Цитата
Цитата
Оказалось - всё гениальное просто, всё работает. Проблема в том, что нога reset ALC203 не заведена на GPIO пин контроллера и, естественно, аппаратный сброс ему устроить не получается.


Все еще проще чем вы думаете - g45/m10 может управлять линией NRST поэтому никаких GPIO не нужно, к тому же ALC203 недостаточно просто установить сброс на линии reset.
ALC203 Data Sheet, 9.3 Reset, p. 37
...
Но почему-то все равно нестабильный сброс (похоже я не правильно понял даташит g45), в этом же бутсрапе есть сброс кодека для платы m10 - надо попробовать оттуда списать.

Ага, читал даташит, то, что NRST управляемый знаю. Я просто грешил на момент включения питания - там на линии может оказаться всё что угодно, пока не запустился микроконтроллер. Ну и дребезг кнопки, повторю, еще никто не отменял.
Да и у вас всё правильно сделано, по документации... А что выпендривается - фиг его знает сколько аппаратных глюков там, еще не обнаруженных.

P.S. Спасибо за помощь! Аудиокодек мне то не очень нужен, всё равно свою плату развожу без него, а вот загрузка с SD очень кстати!
Спуститься к концу Подняться к началу
Персональная информация
Aviator
Добавлено 11.02.2011 12:52 Сообщение: 13
Aviator
0

Пункты: 844
Регистрация: 10.02.2011
Цитата

The AC97 controller should drive SYNC and SDATA_OUT low during the period of RESET# assertion to guarantee that the
ALC203 has reset successfully.

Да, еще, по моим наблюдениям, если в первый раз сброс кодека не удался, то и последующие попытки ни к чему не приводят. Если же сброс удался, то он потом реагирует на команды стабильно, сбрасывается без проблем. Может быть из-за того, что на этих выводах присутствует какой-то "мусор", например, при включении питания?
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 11.02.2011 22:26 Сообщение: 14
Pavel Ivanchenko
Admin
4.39

Пункты: 91445
Регистрация: 24.03.2009
Пол: Мужчина
Дело в том, что у кодека есть такая особенность - входить в "специфическое" состояние (какой то режим работы) при определенных уровнях на его описываемых выше пинах при активном сбросе.
В этом и есть корень "бед".
В бутстрапе (не SD-шном) я намеренно выставлял "правильные уровни" и это привело систему в норму (при этом сброс я не трогал).
С появлением SD бутстрапа, тема с "инициализацией" кодека опять стала актуальной, sasamy с большей ответсвенностью отнесся (за что отдельное спасибо) к сбросу AC97, но как говорит - все-равно иногда не срабатывает.
Я пока детально звук с SD бутстрапом не тестировал (в safe режиме AC97 в штатных бинарниках отключен), смотрел осциллографом - импульс сброса присутствует и довольно значительный, мне кажется, нужно увеличить интевал времени после выставления уровней на пинах AC97 и перед сбросом и уменьшить длительность самого сброса, позже буду экспериментировать.
На платах новой ревизии я добавил возможность сброса AC97 через GPIO, но штатная сборка плат идет со сбросом через RESET.
Сегодня на разных платах пытался "поймать момент" не запуска AC97 с NAND бутстрапом - запускается стабильно, да и за все время тестирования плат не припомню случая, чтобы проигрыш звучал не при первой же перезагрузке ...
Спуститься к концу Подняться к началу
Персональная информация
Aviator
Добавлено 11.02.2011 23:58 Сообщение: 15
Aviator
0

Пункты: 844
Регистрация: 10.02.2011
Цитата
Сегодня на разных платах пытался "поймать момент" не запуска AC97 с NAND бутстрапом - запускается стабильно, да и за все время тестирования плат не припомню случая, чтобы проигрыш звучал не при первой же перезагрузке ...

Ясно. Я так и предполагал, насчёт запрещенных состояний аудиокодека. На всякий случай попробую с лабораторным блоком питания. Сейчас то используется обычный импульсный, но что-то этот китай мне не нравится... Тоже, по возможности, поэкспериментирую с времянками сброса.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45/M10