Перейти к содержанию
    

STM32F429 + VS1053 - нет звука

Привет всем.

 

Приобрёл тут китаёзный модуль на VS1053b - http://www.ebay.com/itm/New-Sell-Style-MP3...MMAAOSwjDZYdasE

Отличается от тамошней картинки только наличием у меня резюка R5 - там на фото он отсутствует, у меня 100 кил в землю. Это нога 34, GPIO1.

 

Проблема такая: все регистры читаются, пишутся, ID нормальный приходит, всё типа ок, а звука нету - ни синуса, ни декодированного файла. Короче, партизан на допросе.

Пытался гнать к него MP3 и WAV (файлы проверенные, F105+VS1053 их играет норм) - тоже тишина, но судя по времени работы функции проигрывания файла - понимает и декодит нормально. Время работы функции совпадает с длительностью звучания файлов - проверено.

 

Файл драйвера (без функции проигрывания, если надо - выложу) приложил, сам он рабочий, переделанный с великолепно работающей связки F105+VS1053 (переделана только работа с ногами проца/SPI).

Переделал вроде без ошибок - этот же драйвер понимает и VS1003, который нормально свистит синусами и играет музыку на том же F429 проце (дискаверина).

 

Уже мозг весь об неё сломал, помогите кто может плиз. Или это китаёзы брак пригнали??

 

Что ещё бросилось в глаза - все GPIO ноги в ДШ (также как и на моей работающей плате с Ф105) притянуты к земле 100к резюками.

На этом модуле - резюк только на ноге 34, остальные, похоже, висят в воздухе.

 

Пытался менять кварц (у китайцев стоял 12.288МГц, ставил 24.576, как на моей рабочей плате), подправил соответствующим образом инициализацию - ничего не дало. Поставил обратно родной 12.288.

 

PS.

Опыт работы с этими микрухами есть, успешно заводил VS1011e, VS1003 и такой же 1053.

Но с тупым молчанием микросхемы сталкиваюсь впервые. :crying:

 

Спасибо.

vs1011.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опыт работы с этими микрухами есть, успешно заводил VS1011e, VS1003 и такой же 1053.

Но с тупым молчанием микросхемы сталкиваюсь впервые. :crying:

 

проверьте все питания, особенно в аналоговой части - дохлый/бракованный дроссель может обесточить выход звука

раз к чипу доступ есть, то цифровая часть исправна и проблема в аналоговой..

при включение и попытке проигрывания музыки в наушниках полная тишина? насколько я возился с vlsi, там д.б. характерный "шелчок".. если подобного нет, то присмотритесь к стереоджеку, может он дефектный или пайка отвалилась - для паранойи подпаяйте свой разъем на проводках или осциллом потыкайте относительно контакта GBUF..

перепроверьте настройки микшера и громкости..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Громкость максимальная - после инициализации специально нули туда загнал.

Щелчки еле слышимые есть - но я так и не понял, в какие моменты они появляются.

Ещё было следующее - когда стоял кварц 24.576, при постоянной подаче синуса в бесконечном цикле где-то раз в 2 минуты (точный период не засекал) был слышен писк согласно моему циклу.

Но буквально по 2 раза - это 2 оборота моего цикла:

void vs1011_sinewave_beep (uint8_t count)
{
// n =
   const uint8_t sine_on [ 8 ] = { 0x53, 0xEF, 0x6E, 0x04, 0x00, 0x00, 0x00, 0x00 };
   const uint8_t sine_off [ 8 ] = { 0x45, 0x78, 0x69, 0x74, 0x00, 0x00, 0x00, 0x00 };
   uint8_t i;

VS1011_RESET_RES ( );		// nRESET = 0
   delay_ms ( 1 );
VS1011_SET_RES ( );			// nRESET = 1
   delay_ms ( 500 );

// Ждать, пока DREQ == 0
while ( VS1011_DREQ != SET );

// Test sine - p. 36-37
//    vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_TESTS | SM_CLK_RANGE );
   vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_TESTS );

   while ( count -- )
   {
       for ( i = 0; i < 8; i ++ )
           vs1011_writeData ( sine_on [ i ] );

       delay_ms ( 100 );

       for ( i = 0; i < 8; i ++ )
           vs1011_writeData ( sine_off [ i ] );

       delay_ms ( 100 );
   } // while
} // vs1011_sinewave_beep

 

на кварце 12.288 и этого не слышал.

SM_CLK_RANGE в коде - это 0x8000 - признак кварца 24.576.

с разъёмом и осциллом на его контактах повожусь - позже отпишу, когда появится инфа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для проверки поставьте в конец SPI_sendByte (после чтения DR)

 

 

while ((SPI1->SR & SPI_SR_BSY) != 0)

;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В течении дня попробую - отпишусь.

Пока функция отправки-приёма байта по SPI такая:

// Чтение/запись байта SPI
static uint8_t SPI_sendByte ( uint8_t data )
{
    u8 rxbyte;

    while ( !( SPI_PORT -> SR & SPI_SR_TXE ) );
    SPI_PORT -> DR = data;

    while ( !( SPI_PORT -> SR & SPI_SR_RXNE ) );
    rxbyte = SPI_PORT->DR;

    return rxbyte;
} // SPI_sendByte

На SPI кроме вс-ки никого больше нет.

 

Попалось на глаза вот это - http://radiokot.ru/forum/viewtopic.php?p=1852790#p1852790 Пишут, что надо все GPIO в землю класть ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попалось на глаза вот это - http://radiokot.ru/forum/viewtopic.php?p=1852790#p1852790 Пишут, что надо все GPIO в землю класть ...

в типовой схеме их даташита все gpio прибиты на землю через общий 100кОм..

и есть такие упоминания

 

"Unless pull-down resistor is used, SPI Boot is tried. See Chapter 9.9 for details"

 

"If GPIO0 is set with a pull-up resistor to 1 at boot time, VS1053b tries to boot from external SPI memory."

 

"If GPIO0 is low and GPIO1 is high during boot, real-time MIDI mode is activated. In this mode the PLL

is configured to 4.0×, the UART is configured to the MIDI data rate 31250 bps, and real-time MIDI data

is then read from UART and SDI. Both input methods should not be used simultaneously. If you use

SDI, first send 0xff and then send the MIDI data byte.

EarSpeaker setting can be configured with GPIO2 and GPIO3. The state of GPIO2 and GPIO3 are only

read at startup"

 

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

попробуйте аккуратно прозвонить 33,9,10,11,12,25,36, чтобы никуда не были подключены, а потом подключить их к 34 (там где у вас 100кОм). для скорости хотя бы гпио0(33)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

похоже ваш случай:

http://www.vsdsp-forum.com/phpbb/viewtopic.php?t=556

было

"I can communicate with the chip but the chip refuses to even generate the test sine wave.

I pretty much read all the posts about VS1053 and verified all the signals sevferal times. Verified 3.3V and 1.8V regulators on the board. Tried the SDI shared mode first. Then added the XDCS line - nothing. After the hardware reset I only hear a loud click in the speakers - that's all. I'm stuck."

стало

"You're right! The board I bought doesn't have a pull-down res on pin 34 (GPIO1). It only has 100k on GPIO0. I just shorted pin 33 and 34 and it started to work."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, GPIO0 и GPIO1 соединить вместе на данный момент проще всего. Они там соседние :)

 

Как проверю - отпишусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но с тупым молчанием микросхемы сталкиваюсь впервые. :crying:

Вам сама микросхема уже как-бы намекает: "Я здесь лишняя!" :biggrin:

У Вас же в полном распоряжении STM32F429. Что ещё нужно для MP3?

Или STM32F429 - чисто для обогрева девайса, а всю работу делает VS? B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам сама микросхема уже как-бы намекает: "Я здесь лишняя!" :biggrin:

У Вас же в полном распоряжении STM32F429. Что ещё нужно для MP3?

Или STM32F429 - чисто для обогрева девайса, а всю работу делает VS? B)

 

Ну WAV PCM, MP3 можно сыграть и без микрухи, согласен. А WMA, OGG, FLAC? Про midi я вообще молчу, это не оцифровка, его просто так на простых ЦАПах не сыграешь, нужен специализированный синтезатор.

Ладно, это религия, теперь по делу.

 

После соединения GPIO0 и GPIO1 вместе звук пошёл, но как-то странно. Функцию писка я приводил выше, но вылезла такая странность: после цикла

for ( i = 0; i < 8; i ++ )

vs1011_writeData ( sine_on [ i ] );

писк включается только первый раз, при повторной подаче этих же команд слышу просто щелчок и всё.

Работает только если загнать всю процедуру сброса чипа внутрь того while, т.е. сразу перед подачей команды включения синуса. Правильно это или нет - не знаю. VS1003 работает в том варианте, как написано выше.

 

Пробовал включить проигрывание.

Музыка заиграла, но у меня какая-то ещё хрень, видимо, с генератором, секунду-две нормально играет, потом начинает замедленно играть и с какими-то щелчками. Как будто скорости не хватает.

От манипуляций с частотой SPI эффекта не заметил.

OGG и FLAC вообще не играют. WAV тоже криво. Видимо из-за того же генератора.

Может я кварц плохо впаял, пока не знаю. Позже попробую его опять перепаять.

Сейчас кварц стоит родной, 12.288 MHz. При инициализации бит SM_CLK_RANGE в MODE ставлю в 0, остальное не меняю.

В CLOCK_F пишу 0xE430. Пробовал включать там же SC_ADD - пофигу. Потом попробую пересчитать, хотя не думаю, что здесь ошибка, т.к. другой VS1053 (который на Ф105) с такими же константами работает нормально.

Единственное отличие - там кварц 24.576 и включаю бит SM_CLK_RANGE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

выдачу через SPI дорабатывали? К снижению частоты отношения не имеет.

Работает только если загнать всю процедуру сброса чипа внутрь того while, т.е. сразу перед подачей команды включения синуса

Вот это намекает на то, что снятие CS происходит раньше чем заканчивается выдача.

Кстати, после манипуляций с CS (после установки и после снятия) советую поставить __DSB() для того, чтобы изменение на выходе порта успело произойти дол начала следующего куска кода, предполагающего это действие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, после манипуляций с CS (после установки и после снятия) советую поставить __DSB() для того, чтобы изменение на выходе порта успело произойти дол начала следующего куска кода, предполагающего это действие.

Я обычно ставлю __DMB()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SPI доработал - не полегчало :crying: .

// Чтение/запись байта SPI
static uint8_t SPI_sendByte ( uint8_t data )
{
   u8 rxbyte;

   while ( !( SPI_PORT -> SR & SPI_SR_TXE ) );
   SPI_PORT -> DR = data;

   while ( !( SPI_PORT -> SR & SPI_SR_RXNE ) );
   rxbyte = SPI_PORT-> DR;

   while ( (SPI_PORT -> SR & SPI_SR_BSY) != 0);

   return rxbyte;
} // SPI_sendByte

Наверное, всё-таки кварц надо пошевелить ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное, всё-таки кварц надо пошевелить ...

попробуйте найти для замены на 24.576 МГц.. возможно плохая совместимость текущего кварца и встроенного блока pll в чипе.. да и место пайки, а также соседние кондюки/резюки спиртом промойте..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...