реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F429 + VS1053 - нет звука, почему?
hd44780
сообщение Jul 16 2017, 14:02
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет всем.

Приобрёл тут китаёзный модуль на 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.gif

Спасибо.
Прикрепленные файлы
Прикрепленный файл  vs1011.zip ( 21.24 килобайт ) Кол-во скачиваний: 10
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 16 2017, 16:59
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 16 2017, 17:02) *
Опыт работы с этими микрухами есть, успешно заводил VS1011e, VS1003 и такой же 1053.
Но с тупым молчанием микросхемы сталкиваюсь впервые. crying.gif


проверьте все питания, особенно в аналоговой части - дохлый/бракованный дроссель может обесточить выход звука
раз к чипу доступ есть, то цифровая часть исправна и проблема в аналоговой..
при включение и попытке проигрывания музыки в наушниках полная тишина? насколько я возился с vlsi, там д.б. характерный "шелчок".. если подобного нет, то присмотритесь к стереоджеку, может он дефектный или пайка отвалилась - для паранойи подпаяйте свой разъем на проводках или осциллом потыкайте относительно контакта GBUF..
перепроверьте настройки микшера и громкости..
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 17 2017, 05:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Громкость максимальная - после инициализации специально нули туда загнал.
Щелчки еле слышимые есть - но я так и не понял, в какие моменты они появляются.
Ещё было следующее - когда стоял кварц 24.576, при постоянной подаче синуса в бесконечном цикле где-то раз в 2 минуты (точный период не засекал) был слышен писк согласно моему циклу.
Но буквально по 2 раза - это 2 оборота моего цикла:
CODE
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.
с разъёмом и осциллом на его контактах повожусь - позже отпишу, когда появится инфа.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 17 2017, 05:50
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



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


while ((SPI1->SR & SPI_SR_BSY) != 0)
;
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 17 2017, 08:24
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



В течении дня попробую - отпишусь.
Пока функция отправки-приёма байта по 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 в землю класть ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 17 2017, 08:47
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 17 2017, 11:24) *
Попалось на глаза вот это - 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)
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 17 2017, 12:02
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



похоже ваш случай:
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."
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 17 2017, 12:14
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



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

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


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 17 2017, 14:16
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(hd44780 @ Jul 16 2017, 17:02) *
Но с тупым молчанием микросхемы сталкиваюсь впервые. crying.gif

Вам сама микросхема уже как-бы намекает: "Я здесь лишняя!" biggrin.gif
У Вас же в полном распоряжении STM32F429. Что ещё нужно для MP3?
Или STM32F429 - чисто для обогрева девайса, а всю работу делает VS? cool.gif
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 19 2017, 07:42
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(jcxz @ Jul 17 2017, 17:16) *
Вам сама микросхема уже как-бы намекает: "Я здесь лишняя!" biggrin.gif
У Вас же в полном распоряжении STM32F429. Что ещё нужно для MP3?
Или STM32F429 - чисто для обогрева девайса, а всю работу делает VS? cool.gif


Ну 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.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 19 2017, 09:26
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



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

Вот это намекает на то, что снятие CS происходит раньше чем заканчивается выдача.
Кстати, после манипуляций с CS (после установки и после снятия) советую поставить __DSB() для того, чтобы изменение на выходе порта успело произойти дол начала следующего куска кода, предполагающего это действие.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 19 2017, 09:31
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Genadi Zawidowski @ Jul 19 2017, 12:26) *
Кстати, после манипуляций с CS (после установки и после снятия) советую поставить __DSB() для того, чтобы изменение на выходе порта успело произойти дол начала следующего куска кода, предполагающего это действие.

Я обычно ставлю __DMB()
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 19 2017, 09:45
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



SPI доработал - не полегчало crying.gif .
CODE
// Чтение/запись байта 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

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


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 19 2017, 10:20
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 19 2017, 12:45) *
Наверное, всё-таки кварц надо пошевелить ...

попробуйте найти для замены на 24.576 МГц.. возможно плохая совместимость текущего кварца и встроенного блока pll в чипе.. да и место пайки, а также соседние кондюки/резюки спиртом промойте..
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 19 2017, 12:23
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Да, кварц 24.576 есть, как запаяю/проверю, отпишусь, что получилось.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 20 2017, 18:49
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Впаял кварц 24.578. Функцию писка немного переписал:

CODE
void vs1011_sinewave_beep ( )
{
// 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 );

vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_TESTS | SM_CLK_RANGE );

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

delay_ms ( 250 );

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

delay_ms ( 250 );
} // vs1011_sinewave_beep


вызываю в цикле. Пищит нормально в оба уха, no problem, как говорят. Частоту на выходе, правда, не мерял. Текущий драйвер прилагаю.

А вот с проигрыванием беда - mp3 проигрываются буквально как на магнитофоне с завышенной скоростью движения ленты. Другие форматы не пробовал.
функция проигрывания файла самая примитивная, без наворотов:
CODE

uint8_t readBuf [ READBUF_SIZE ];

// Проигрываемый файл
FIL file;

// Проиграть файл
bool Play_file ( char *fName )
{
FRESULT res;
UINT nRead;

// открыть файл
res = f_open ( &file, fName, FA_OPEN_EXISTING | FA_READ );
if ( res != FR_OK )
return false;

// цикл проигрывания
while ( 1 )
{
// Ждать запроса данных от VS
// DREQ == 1 - посылать
// DREQ == 0 - ждать
while ( vs1011_isDataReq ( ) == false );

res = f_read ( &file, readBuf, 32, &nRead );
if ( res != FR_OK || nRead != 32 )
{
break;
} // if
vs1011_send32 ( readBuf );
} // while

// закрыть файл
f_close ( &file );

// послать 2к нулей для очистки внутренних буферов VS
for ( nRead = 0; nRead < 2048; nRead ++ )
vs1011_writeData ( 0 );

// Сброс VS
vs1011_reset ( );

return true;
} // Play_file

Размер буфера 2 кила (там был кеш с опережающим чтением, я его пока выкинул), но то пофиг, ни на что не влияют.

В чём ещё могут быть траблы?

PS.
начинаю думать, что этот модуль - вообще брак полный crying.gif .
Прикрепленные файлы
Прикрепленный файл  vs10xx.zip ( 21.3 килобайт ) Кол-во скачиваний: 8
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 20 2017, 20:01
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 20 2017, 21:49) *
вызываю в цикле. Пищит нормально в оба уха, no problem, как говорят. Частоту на выходе, правда, не мерял. Текущий драйвер прилагаю.
В чём ещё могут быть траблы?
PS.
начинаю думать, что этот модуль - вообще брак полный crying.gif .

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

у вас очевидный прогресс - плата раньше "му" не говорила, теперь уже пищит синусом.. измерить надо обязательно - так вы поймете правильность частоты для эталонного синуса

по буратинному мп3 - настройки проверили, вот тут всё правильно:

В CLOCK_F пишу 0xE430.

и нет ли случайно записи в этот регистр?
Код
playSpeed makes it possible to fast forward songs. Decoding of the bitstream is performed, but only each playSpeed frames are played. For example by writing 4 to playSpeed will play the song four times as fast as normal, if you are able to feed the data with that speed. Write 0 or 1 to return to normal speed. SCI DECODE TIME will also count faster. All current codecs support the playSpeed configuration.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2017, 09:39
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Jury093 @ Jul 20 2017, 23:01) *
и нет ли случайно записи в этот регистр?
Код
playSpeed makes it possible to fast forward songs. Decoding of the bitstream is performed, but only each playSpeed frames are played. For example by writing 4 to playSpeed will play the song four times as fast as normal, if you are able to feed the data with that speed. Write 0 or 1 to return to normal speed. SCI DECODE TIME will also count faster. All current codecs support the playSpeed configuration.

не, я таким тюнингом вообще никогда не занимался.
Но пойду раскурю эту тему, может там мусор какой валяется ... У китайцев схема несколько упрощена в сравнении с тем, что нарисовано в ДШ sad.gif .

ЗЫ
купил модуль, чтобы не делать самому плату, а тут такая хрень. Чип у меня и свой уже 3 года в коробке где-то валяется ..

Цитата(Jury093 @ Jul 20 2017, 23:01) *
у вас очевидный прогресс - плата раньше "му" не говорила, теперь уже пищит синусом.. измерить надо обязательно - так вы поймете правильность частоты для эталонного синуса

Угу. Поленились ребяты эти GPIO0 и GPIO1 вместе спаять ... Потому и молчала.
Там ещё куча ног в воздухе у них висит - GPIO2...GPIO7. Там I2S для внешнего ЦАПа и ещё один SPI какой-то что-ли.
Синус померю осциллом, отпишусь.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 21 2017, 10:18
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 21 2017, 12:39) *
Синус померю осциллом, отпишусь.

на всякий случай - в моем предыдущем сообщение было не утверждение а вопрос вот по этой настройке в исходниках:
Код
*         F = 24576/2 = 12288кГц = 12288000 Гц
*        SC_FREQ = (12288000-8000000)/4000 = 1072 = 0x0430 =    100 0011 0000 - 12 бит
*
*        CLOCK_F = 0xE000 | 0x0000 | 0x0430 = 0xE430
*
*        SC_MULT = 5, SC_ADD = 7
*        F = 12.288 * (5+2) = 86,016 MHz
*/
//        vs1011_writeCommand ( VS1011_CLOCKF, 0xE430 | 0x1800 );        // 0xFC30
        vs1011_writeCommand ( VS1011_CLOCKF, 0xE430 );

явно расчет делался на 12.288МГц, а т.к. сейчас у вас кварц 24.576МГц, то частота для фирвари будет в 2 раза выше, возможно ей это не нравится отсюда и фальцет на мп3..
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2017, 10:45
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Сорри, я не понял, что это был вопрос. Да, расчёты все на 12.288, т.к. кварц 24.576, то везде задаётся
vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_CLK_RANGE ); // 0x8800
SM_CLK_RANGE - 15 бит в 1 - кварц 24..26.
А в расчётах магического числа для CLOCK_F в доке вообще ни звука об этом.
Я для интереса пытался рассчитывать для 24.576 - результат не влез в отведённые 10 бит.

Сообщение отредактировал IgorKossak - Jul 21 2017, 13:26
Причина редактирования: бездумное цитирование


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 21 2017, 11:59
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 21 2017, 13:45) *
Сорри, я не понял, что это был вопрос. Да, расчёты все на 12.288, т.к. кварц 24.576, то везде задаётся
vs1011_writeCommand ( VS1011_MODE, SM_SDINEW | SM_CLK_RANGE ); // 0x8800
SM_CLK_RANGE - 15 бит в 1 - кварц 24..26.
А в расчётах магического числа для CLOCK_F в доке вообще ни звука об этом.
Я для интереса пытался рассчитывать для 24.576 - результат не влез в отведённые 10 бит.

да, в документации явно не хватает четких определений..
все же попробуйте загрузить вместо 0xe430 допустим 0x4430 и послушать (на всякий случай битрейт пониже сделайте)
и хорошей проверкой будет генерация эталонного файла с синусом известной частоты, прогоном через кодек и измерением осциллом..
я так ловил искажения при подключение аудиокодека к АРМу, кстати с кварцем на 24.576 пело явно выше, вылечил переключением на тактирование от АРМа
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2017, 12:25
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Jury093 @ Jul 21 2017, 14:59) *
все же попробуйте загрузить вместо 0xe430 допустим 0x4430 и послушать (на всякий случай битрейт пониже сделайте)
и хорошей проверкой будет генерация эталонного файла с синусом известной частоты, прогоном через кодек и измерением осциллом..


Да, сделаю, спасибо. Есть файл - звучит 440 Hz.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 21 2017, 17:28
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Значит так.

1. Проверил осциллом/частотомером - синус свистит идеально. Частотомер показал ровно столько, сколько я заказал.
2. Перекодировал тот файлик со звучение 440Hz в MP3 44.1kHz 32 KBps - частотомер показал ну так 880Hz в среднем, немного прыгает +-50..100Hz. Более высокие битрейты чуть позже проверю.

Чё с этим делать? Крутить CLOCK_F?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 21 2017, 20:27
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 21 2017, 20:28) *
Чё с этим делать? Крутить CLOCK_F?

покрутите, но осторожно - в доке пишут что превышать частоту не стоит..

посмотрел в той же доке пример:
Example: If SCI CLOCKF is 0x9BE8, SC MULT = 4, SC ADD = 3 and SC FREQ = 0x3E8 = 1000. This means that XTALI = 1000×4000+8000000 = 12 MHz. The clock multiplier is set to 3.5×XTALI = 42 MHz, and the maximum allowed multiplier that the firmware may automatically choose to use is (3.5 + 2.0)×XTALI = 66 MHz
у вас кварц 24.576 и взводится бит включения делителя, тогда XTALI=12288000 отсюда SC_FREQ=0x430, что похоже на ваше значение, а вот с умножителем я бы прописал х3 (читать не ХэЗэ, а умножить на три), тогда с частотой 12.288 вы попадаете четко в середину вилки частот.
SC_ADD=1.0х , т.е. 0x800
итоговое значение 0x6000+0x800+0x430=0x6c30

update и вообще, для таких экспериментов проще дописать консоль в процессор и иметь отладку и вывод инфы прямо на экран

Сообщение отредактировал Jury093 - Jul 22 2017, 08:30
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 22 2017, 09:58
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Дисплей и отладка есть, Слава Богу.

В общем после правок множителей всё завелось. WAV и FLAC немного подвывали, решилось увеличением частоты SPI.
Получившиеся настройки таковы:

Код
SC_MULT = x4.5
SC_ADD = x2.0


Соответственно, CLOCKF = 0xC000 | 0x1800 | 0x0430.

Единственное, что не пошло, это WMA. Тишина полная, хотя файл проверенный.
Ну да фиг с ним, я ими не пользуюсь, сделал пару штук исключительно для проверки этих чипов.

Jury093, спасибо Вам огромное.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 22 2017, 11:38
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(hd44780 @ Jul 22 2017, 12:58) *
В общем после правок множителей всё завелось. WAV и FLAC немного подвывали, решилось увеличением частоты SPI.
Jury093, спасибо Вам огромное.

поздравляю!
ЗЫ мне особо не за что - вы и сами нашли верные решения..

насчет "молчания" wma - хоть ваши и проверенные, но видимо надо убедится, что формат подходит в оговоренные в доке стандарты
8.6 Supported WMA Formats
Windows Media Audio codec versions 2, 7, 8, and 9 are supported. All WMA profiles (L1, L2, and L3) are supported. Previously streams were separated into Classes 1, 2a, 2b, and 3. The decoder has passed Microsoft’s conformance testing program. Windows Media Audio Professional is a different codec and is not supported

там еще расписаны в таблице допустимые комбинации

ну и для очистки совести посмотреть в структуру заголовка для wma
10.11.2 WMA
Parameter Address Usage
curPacketSize 0x1e2a/2b The size of the packet being processed
packetSize 0x1e2c/2d The packet size in ASF header
The ASF header packet size is available in packetSize. With this information and a packet
start offset from jumpPoints you can parse the packet headers and skip packets in ASF files.
WMA decoder can also increase the internal clock automatically when it detects that a file can
not be decoded correctly with the current clock. The maximum allowed clock is configured with
the SCI_CLOCKF register.


как вариант - еще пошаманить со скоростью spi и регистром SCI_CLOCKF
Go to the top of the page
 
+Quote Post
hd44780
сообщение Jul 22 2017, 18:05
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Да, как-нибудь гляну ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01661 секунд с 7
ELECTRONIX ©2004-2016