yakuzaa 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Пытаюсь сделать запись с микрофона на SD карточку. В ДШ на VS1053 приведен код инициализации ADPCM энкодера, запускаю - работает, звук с микрофона начинает идти в наушники... Но в ДШ еще сказано, что необходимо применить патч, патч применяю, но его надо запустить и тут начинаются приколы: в ДШ про запуск патча ничего вообще не сказано, а в примере плеера от VLSI идет запуск огг/ворбис патча... vs_write(VS_AICTRL0, 16000U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL1, 0); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL2, 4096U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL3, 0); delay_ms(10); while(!DREQ); LoadUserCode(); vs_write(VS_AIADDR, 0x0034); while(!DREQ); vs_write(VS_MODE, 0x1804); delay_ms(10); while(!DREQ); Кароче путанница, если кто делал - помогите пожалуйста... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faradey 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Пытаюсь сделать запись с микрофона на SD карточку. В ДШ на VS1053 приведен код инициализации ADPCM энкодера, запускаю - работает, звук с микрофона начинает идти в наушники... Но в ДШ еще сказано, что необходимо применить патч, патч применяю, но его надо запустить и тут начинаются приколы: в ДШ про запуск патча ничего вообще не сказано, а в примере плеера от VLSI идет запуск огг/ворбис патча... vs_write(VS_AICTRL0, 16000U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL1, 0); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL2, 4096U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL3, 0); delay_ms(10); while(!DREQ); LoadUserCode(); vs_write(VS_AIADDR, 0x0034); while(!DREQ); vs_write(VS_MODE, 0x1804); delay_ms(10); while(!DREQ); Кароче путанница, если кто делал - помогите пожалуйста... вам очень повезло, я решал эту же задачу. все упаковано в приложенный архив: "ADPCM\readme.txt" - краткое описание на русском "ADPCM\vs1053_freertos.c" - работающий пример на С "ADPCM\vorbis53b.plg" - сам патч "ADPCM\vs1053b-patches110.zip" - пример от производителя VS1053 "ADPCM\vs1053_01.pdf" - манул по теме ADPCM_2009_Sep_22_12_37_01_.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 25 мая, 2010 Опубликовано 25 мая, 2010 (изменено) · Жалоба Faradey спасибо огромное! по поводу огг-ворбис - у меня патч ворбиса во флеш уже не влезет (atmega32), поэтому думаю сделать просто ADPCM. Как я понимаю, для ADPCM нужен только загрузить в VS1053 маленький патчик, но! в ДШ ничего не сказано, что я должен записывать в SCI_AIADDR после загрузки этого патчика. Выдержка из ДШ: WriteVS10xxRegister(SCI_AICTRL0, 16000U); WriteVS10xxRegister(SCI_AICTRL1, 0); WriteVS10xxRegister(SCI_AICTRL2, 4096U); WriteVS10xxRegister(SCI_AICTRL3, 0); WriteVS10xxRegister(SCI_MODE, ReadVS10xxRegister(SCI_MODE) | SM_RESET | SM_ADPCM | SM_LINE1); WriteVS10xxPatch(); /* Only for VS1053b */ Изменено 25 мая, 2010 пользователем Ivan Kuznetzov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faradey 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Faradey спасибо огромное! по поводу огг-ворбис - у меня патч ворбиса во флеш уже не влезет (atmega32), поэтому думаю сделать просто ADPCM. Как я понимаю, для ADPCM нужен только загрузить в VS1053 маленький патчик, но! в ДШ ничего не сказано, что я должен записывать в SCI_AIADDR после загрузки этого патчика. Выдержка из ДШ: WriteVS10xxRegister(SCI_AICTRL0, 16000U); WriteVS10xxRegister(SCI_AICTRL1, 0); WriteVS10xxRegister(SCI_AICTRL2, 4096U); WriteVS10xxRegister(SCI_AICTRL3, 0); WriteVS10xxRegister(SCI_MODE, ReadVS10xxRegister(SCI_MODE) | SM_RESET | SM_ADPCM | SM_LINE1); WriteVS10xxPatch(); /* Only for VS1053b */ Не могу понять вашу проблему, прочитайте внимательно файл "readme.txt" из архива, там всё описано по шагам. либо обратить внимание на файл с примером "vs1053_freertos.c" вот интересующая вас часть от-туда: _VS1053_SetCS( p->platform ); _VS1053_SetRESET( p->platform ); _VS1053_Delay_ms( 10 ); _VS1053_ResetDCS( p->platform ); _VS1053_ResetRESET( p->platform ); _VS1053_ResetCS( p->platform ); _VS1053_WaitDREQ( p->platform ); VS1053_SetupHighSpeedSPI( p ); // Run plugin VS1053_LoadUserCode( p, vs1053_decode_patch, ARRSIZEOF( vs1053_decode_patch ) ); // Set AICTRL registers VS1053_WriteRegister( p, VS1053_SCI_AICTRL0, sample_rate ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL1, rec_gain ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL2, max_autogain ); VS1053_WriteRegister( p, VS1053_SCI_AICTRL3, 0x0002 ); // 2 = left channel, 3 = right channel VS1053_WriteRegister( p, VS1053_SCI_MODE, VS1053_ReadRegister( p, VS1053_SCI_MODE ) | VS1053_SM_ADPCM ); // VS1053_SM_RESET VS1053_WriteRegister( p, VS1053_SCI_AIADDR , 0x300 ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Не могу понять вашу проблему там для ogg все описано. а мне необходио просто wav записывать? зачем мне ogg/vorbis патч грузить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faradey 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба там для ogg все описано. а мне необходио просто wav записывать? зачем мне ogg/vorbis патч грузить? ? :01: что то я совсем ничего не понимаю. Попробую еще раз разобраться: Итак: 1. вам надо оцифровать в формате ADPCM. 2. записать в wav-файл В моём примере: 1. ф-ция оцифровки в ADPCM формат VS1053_ADPCM_RecordData(...) 2. ф-ция-поток для FreeRTOS в которой как раз сохраняетс в wav-файл под FatFS ------ а, вот по поводу что я должен записывать в SCI_AIADDR после загрузки этого патчика. я вам уже отвечал, пожалуйста ещё раз VS1053_WriteRegister( p, VS1053_SCI_AIADDR , 0x300 ); З.Ы. видно что моем примере грузится не ogg патч, а ADPCM патч: /** * патч для корректной записи ADPCM */ static const unsigned short vs1053_decode_patch[] = { #include "vorbis53b.plg" }; // чтение данных с кодека void VS1053_ADPCM_RecordData( VS1053Type *p, CIR_BUF *pcb, u16 sample_rate, u16 rec_gain, u16 max_autogain ) { ... // Run plugin VS1053_LoadUserCode( p, vs1053_decode_patch, ARRSIZEOF( vs1053_decode_patch ) ); ... } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 31 мая, 2010 Опубликовано 31 мая, 2010 (изменено) · Жалоба в общем накидал исходник - из микрофона звук прёт, автогейн работает, но на карту не пишет, где грабли так и не понял, если после f_open ничего сразу не записать, то файл вообще не создается, как будто конфликт SD карты с VS1053. если записать какую-нибудь дребедень, то файл создастся, но из массива в него ничего не пишется, видимо из-за тогоже конфликта. исходник прилагаю, , пожалуйста, помогите найти грабли... :unsure: /** \file record.c ADPCM Recording */ #include "main.h" #include "mmc.h" #include "ff.h" #include "dataflash.h" #include "vs1001.h" unsigned char dataBufPtr[256]; extern FATFS fatfs; #ifndef SKIP_PLUGIN_VARNAME #define PLUGIN_SIZE 605 __flash const unsigned short plugin[605] = { // Compressed plugin #endif 0x0007, 0x0001, 0x8300, 0x0006, 0x01f2, 0xb080, 0x0024, 0x0007, // 0 0x9257, 0x3f00, 0x0024, 0x0030, 0x0297, 0x3f00, 0x0024, 0x0006, // 8 0x0017, 0x3f10, 0x0024, 0x3f00, 0x0024, 0x0000, 0xf6d7, 0xf400, // 10 0x55c0, 0x0000, 0x0817, 0xf400, 0x57c0, 0x0000, 0x004d, 0x000a, // 18 0x708f, 0x0000, 0xc44e, 0x280f, 0xe100, 0x0006, 0x2016, 0x0000, // 20 0x028d, 0x0014, 0x1b01, 0x2800, 0xc795, 0x0015, 0x59c0, 0x0000, // 28 0xfa0d, 0x0039, 0x324f, 0x0000, 0xd20e, 0x2920, 0x41c0, 0x0000, // 30 0x0024, 0x000a, 0x708f, 0x0000, 0xc44e, 0x280a, 0xcac0, 0x0000, // 38 0x028d, 0x6fc2, 0x0024, 0x000c, 0x0981, 0x2800, 0xcad5, 0x0000, // 40 0x18c2, 0x290c, 0x4840, 0x3613, 0x0024, 0x290c, 0x4840, 0x4086, // 48 0x184c, 0x6234, 0x0024, 0x0000, 0x0024, 0x2800, 0xcad5, 0x0030, // 50 0x0317, 0x3f00, 0x0024, 0x280a, 0x71c0, 0x002c, 0x9d40, 0x3613, // 58 0x0024, 0x3e10, 0xb803, 0x3e14, 0x3811, 0x3e11, 0x3805, 0x3e00, // 60 0x3801, 0x0007, 0xc390, 0x0006, 0xa011, 0x3010, 0x0444, 0x3050, // 68 0x4405, 0x6458, 0x0302, 0xff94, 0x4081, 0x0003, 0xffc5, 0x48b6, // 70 0x0024, 0xff82, 0x0024, 0x42b2, 0x0042, 0xb458, 0x0003, 0x4cd6, // 78 0x9801, 0xf248, 0x1bc0, 0xb58a, 0x0024, 0x6de6, 0x1804, 0x0006, // 80 0x0010, 0x3810, 0x9bc5, 0x3800, 0xc024, 0x36f4, 0x1811, 0x36f0, // 88 0x9803, 0x283e, 0x2d80, 0x0fff, 0xffc3, 0x003e, 0x2d4f, 0x2800, // 90 0xe380, 0x0000, 0xcb4e, 0x3413, 0x0024, 0x2800, 0xd405, 0xf400, // 98 0x4510, 0x2800, 0xd7c0, 0x6894, 0x13cc, 0x3000, 0x184c, 0x6090, // a0 0x93cc, 0x38b0, 0x3812, 0x3004, 0x4024, 0x0000, 0x0910, 0x3183, // a8 0x0024, 0x3100, 0x4024, 0x6016, 0x0024, 0x000c, 0x8012, 0x2800, // b0 0xd711, 0xb884, 0x104c, 0x6894, 0x3002, 0x2939, 0xb0c0, 0x3e10, // b8 0x93cc, 0x4084, 0x9bd2, 0x4282, 0x0024, 0x0000, 0x0041, 0x2800, // c0 0xd9c5, 0x6212, 0x0024, 0x0000, 0x0040, 0x2800, 0xdec5, 0x000c, // c8 0x8390, 0x2a00, 0xe240, 0x34c3, 0x0024, 0x3444, 0x0024, 0x3073, // d0 0x0024, 0x3053, 0x0024, 0x3000, 0x0024, 0x6092, 0x098c, 0x0000, // d8 0x0241, 0x2800, 0xe245, 0x32a0, 0x0024, 0x6012, 0x0024, 0x0000, // e0 0x0024, 0x2800, 0xe255, 0x0000, 0x0024, 0x3613, 0x0024, 0x3001, // e8 0x3844, 0x2920, 0x0580, 0x3009, 0x3852, 0xc090, 0x9bd2, 0x2800, // f0 0xe240, 0x3800, 0x1bc4, 0x000c, 0x4113, 0xb880, 0x2380, 0x3304, // f8 0x4024, 0x3800, 0x05cc, 0xcc92, 0x05cc, 0x3910, 0x0024, 0x3910, // 100 0x4024, 0x000c, 0x8110, 0x3910, 0x0024, 0x39f0, 0x4024, 0x3810, // 108 0x0024, 0x38d0, 0x4024, 0x3810, 0x0024, 0x38f0, 0x4024, 0x34c3, // 110 0x0024, 0x3444, 0x0024, 0x3073, 0x0024, 0x3063, 0x0024, 0x3000, // 118 0x0024, 0x4080, 0x0024, 0x0000, 0x0024, 0x2839, 0x53d5, 0x4284, // 120 0x0024, 0x3613, 0x0024, 0x2800, 0xe585, 0x6898, 0xb804, 0x0000, // 128 0x0084, 0x293b, 0x1cc0, 0x3613, 0x0024, 0x000c, 0x8117, 0x3711, // 130 0x0024, 0x37d1, 0x4024, 0x4e8a, 0x0024, 0x0000, 0x0015, 0x2800, // 138 0xe845, 0xce9a, 0x0024, 0x3f11, 0x0024, 0x3f01, 0x4024, 0x000c, // 140 0x8197, 0x408a, 0x9bc4, 0x3f15, 0x4024, 0x2800, 0xea85, 0x4284, // 148 0x3c15, 0x6590, 0x0024, 0x0000, 0x0024, 0x2839, 0x53d5, 0x4284, // 150 0x0024, 0x0000, 0x0024, 0x2800, 0xd2d8, 0x458a, 0x0024, 0x2a39, // 158 0x53c0, 0x3009, 0x3851, 0x3e14, 0xf812, 0x3e12, 0xb817, 0x0006, // 160 0xa057, 0x3e11, 0x9fd3, 0x0023, 0xffd2, 0x3e01, 0x0024, 0x0006, // 168 0x0011, 0x3111, 0x0024, 0x6498, 0x07c6, 0x868c, 0x2444, 0x3901, // 170 0x8e06, 0x0030, 0x0551, 0x3911, 0x8e06, 0x3961, 0x9c44, 0xf400, // 178 0x44c6, 0xd46c, 0x1bc4, 0x36f1, 0xbc13, 0x2800, 0xf615, 0x36f2, // 180 0x9817, 0x002b, 0xffd2, 0x3383, 0x188c, 0x3e01, 0x8c06, 0x0006, // 188 0xa097, 0x468c, 0xbc17, 0xf400, 0x4197, 0x2800, 0xf304, 0x3713, // 190 0x0024, 0x2800, 0xf345, 0x37e3, 0x0024, 0x3009, 0x2c17, 0x3383, // 198 0x0024, 0x3009, 0x0c06, 0x468c, 0x4197, 0x0006, 0xa052, 0x2800, // 1a0 0xf544, 0x3713, 0x2813, 0x2800, 0xf585, 0x37e3, 0x0024, 0x3009, // 1a8 0x2c17, 0x36f1, 0x8024, 0x36f2, 0x9817, 0x36f4, 0xd812, 0x2100, // 1b0 0x0000, 0x3904, 0x5bd1, 0x2a00, 0xeb8e, 0x3e11, 0x7804, 0x0030, // 1b8 0x0257, 0x3701, 0x0024, 0x0013, 0x4d05, 0xd45b, 0xe0e1, 0x0007, // 1c0 0xc795, 0x2800, 0xfd95, 0x0fff, 0xff45, 0x3511, 0x184c, 0x4488, // 1c8 0xb808, 0x0006, 0x8a97, 0x2800, 0xfd45, 0x3009, 0x1c40, 0x3511, // 1d0 0x1fc1, 0x0000, 0x0020, 0xac52, 0x1405, 0x6ce2, 0x0024, 0x0000, // 1d8 0x0024, 0x2800, 0xfd41, 0x68c2, 0x0024, 0x291a, 0x8a40, 0x3e10, // 1e0 0x0024, 0x2921, 0xca80, 0x3e00, 0x4024, 0x36f3, 0x0024, 0x3009, // 1e8 0x1bc8, 0x36f0, 0x1801, 0x2808, 0x9300, 0x3601, 0x5804, 0x0007, // 1f0 0x0001, 0x802e, 0x0006, 0x0002, 0x2800, 0xf700, 0x0007, 0x0001, // 1f8 0x8050, 0x0006, 0x0028, 0x3e12, 0x3800, 0x2911, 0xf140, 0x3e10, // 200 0x8024, 0xf400, 0x4595, 0x3593, 0x0024, 0x35f3, 0x0024, 0x3500, // 208 0x0024, 0x0021, 0x6d82, 0xd024, 0x44c0, 0x0006, 0xa402, 0x2800, // 210 0x1815, 0xd024, 0x0024, 0x0000, 0x0000, 0x2800, 0x1815, 0x000b, // 218 0x6d57, 0x3009, 0x3c00, 0x36f0, 0x8024, 0x36f2, 0x1800, 0x2000, // 220 0x0000, 0x0000, 0x0024, 0x0007, 0x0001, 0x8030, 0x0006, 0x0002, // 228 0x2800, 0x1400, 0x0007, 0x0001, 0x8064, 0x0006, 0x001c, 0x3e12, // 230 0xb817, 0x3e14, 0xf812, 0x3e01, 0xb811, 0x0007, 0x9717, 0x0020, // 238 0xffd2, 0x0030, 0x11d1, 0x3111, 0x8024, 0x3704, 0xc024, 0x3b81, // 240 0x8024, 0x3101, 0x8024, 0x3b81, 0x8024, 0x3f04, 0xc024, 0x2808, // 248 0x4800, 0x36f1, 0x9811, 0x0007, 0x0001, 0x8028, 0x0006, 0x0002, // 250 0x2a00, 0x190e, 0x000a, 0x0001, 0x0300, #ifndef SKIP_PLUGIN_VARNAME }; #endif void LoadUserCode(void) { int i = 0; while (i<sizeof(plugin)/sizeof(plugin[0])) { unsigned short addr, n, val; addr = plugin[i++]; n = plugin[i++]; if (n & 0x8000U) { /* RLE run, replicate n samples */ n &= 0x7FFF; val = plugin[i++]; while (n--) { vs_write(addr, val); } } else { /* Copy run, copy n samples */ while (n--) { val = plugin[i++]; vs_write(addr, val); } } } } unsigned char Record(void) { unsigned char res; unsigned int i, bw, num_hwords, sample; FIL file2; res = f_open(&file2, "sound.txt", FA_CREATE_ALWAYS | FA_WRITE); //создаем файл на запись f_printf(&file2, "err %u\r\n", res); // если СРАЗУ ничего не запишем - кукиш! //f_write(&file2,(char*)plugin,sizeof(plugin),&bw); //ну или плагин пущай запишет if (res != FR_OK) return res; vs_sinetest(1); vs_sinetest(0); LoadUserCode(); vs_write(VS_AICTRL0, 8000U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL1, 0); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL2, 4096U); delay_ms(10); while(!DREQ); vs_write(VS_AICTRL3, 0); delay_ms(10); while(!DREQ); vs_write(VS_MODE, 0x1804); delay_ms(10); while(!DREQ); vs_write(VS_AIADDR, 0x0030); while(!DREQ); while(1) { num_hwords = vs_read(VS_HDAT1); if( num_hwords >= 128 ) { // ìèíèìóì îäèí áëîê i=0; while( num_hwords ) { sample = vs_read(VS_HDAT0); dataBufPtr[i] = (UCHAR)(sample >> 8 ); dataBufPtr[i+1] = (UCHAR)(sample & 0xFF ); i+=2; num_hwords--; } } else { delay_ms(1); } if (!PLAY_B) break; DISABLE_XCS(); //f_printf(&file2, "%u\r\n", sample); f_write(&file2,dataBufPtr,sizeof(dataBufPtr),&bw); }//while not button - stop recording when BUTTON is pressed f_close(&file2); vs_init(SOFT); vs_sinetest(0); vs_sinetest(1); return 0; } Изменено 31 мая, 2010 пользователем Ivan Kuznetzov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faradey 0 1 июня, 2010 Опубликовано 1 июня, 2010 · Жалоба как будто конфликт SD карты с VS1053 конфликт - маловероятно, ведь вы последовательно работаете с картой и кодеком, хотя и допускаю что на одном интерфейсе SPI. Мой вам совет проверьте внимательно работу с SD-картой, возможно вы не снимаете CS или не верно выдерживаете тайминги.... Гадать тяжело, но на всякий случай убедитесь что перенастраиваете SPI (Если он один на двоих). Напишите тестик вида: FATFS fs = { 0 }; FRESULT res; FIL file; disk_msc_tab_init( 0, &msc_card ); res = f_mkfs( 0, 0, 0 ); if(res) { // error mkfs } res = f_mount( 0, &fs ); if(res) { // error mount } res = f_open( &file, "test.tst", FA_CREATE_ALWAYS | FA_OPEN_EXISTING | FA_WRITE ); if( res ) { // error open } .... // пишите - читайте - проверяйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба вопрос к Faradey - а у Вас vs1053 и SD карта на разных SPI сидят? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 11 августа, 2010 Опубликовано 11 августа, 2010 · Жалоба Все получилось! Реализовал проект на STM32. Дело было в выборе плагина для кодирования. Сейчас карта и кодек сидят на одном SPI и не конфликтуют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ave! 0 9 сентября, 2019 Опубликовано 9 сентября, 2019 · Жалоба On 8/11/2010 at 5:14 PM, yakuzaa said: Все получилось! Реализовал проект на STM32. Дело было в выборе плагина для кодирования. Сейчас карта и кодек сидят на одном SPI и не конфликтуют. А вы можете поделиться тем, що у вас получилось? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться