Tuesday, March 14, 2017

ClassNotFoundException: com.mysql.jdbc.Driver solution: Copy mysql jdbc jar file to jre/lib/ext

ClassNotFoundException: com.mysql.jdbc.Driver


java.exe -cp mysql-connector-java-5.0.8-bin.jar 식으로 jdbc jar 파일을 알려줘도 ClassNotFoundException이 나면


mysql-connector-java-5.0.8-bin.jar 파일을 jre의 lib/ext 폴더에 넣으면 된다.



Wednesday, March 8, 2017

TAS5508C - VS1053B 사이의 I2S 연결 실패. TAS5508C - STA013 는 성공


사진은 테스트 중인 보드. 회로를 대충 만들어 점퍼선이 많음.




VS1053B와 STA013은 비슷하면서도 VS1053B가 기능이 많다. WMA 파일, WAV파일도 출력 가능하다.
그래서 기존에 사용하던 STA013을  VS1053B로 교체하고자 테스트하였다.

TAS5508C는 TI의 8ch PWM processor 이고 I2S 오디오를 입력받아 PWM을 출력한다.
중간에 EQ, auto mute 같은 오디오 처리도 한다.

문제는 VS1053B의 I2S 출력을 TAS5508C가 받아들이지 않는다는것이다.
원인은 모르겠고, 분명 TAS5508C의 I2S 입력 규격에 VS1053B의 출력과 같은 형식이 있음에도 불구하고 안된다.

그래서  STA013을 계속 사용하기로 했음. 이것때문에 이틀동안 삽질함.

VS1053B 의 I2S 출력은 16bit 만 지원한다.

아무래도 TAS5508C가 16bit 입력 받는데 문제가 있는듯.

STA013은 32bit 출력.

-----------------------------------------------------------------------------------------

TAS5508C cannot recognize 16bit i2s signal from VS1053B.
Chip represent  PLL phase lock error, PLL auto lock,SCLK error, and not working.

I tried every thing for that, cannot find right way.

so. I use STA013, and success at first time.

The problem must be 16bit I2S signal from VS1053B that's not acceptable to TAS5508C.


Friday, March 3, 2017

VS1053 을 이용한 mp3 play 시에 음이 빨리 재생되면서 찌직 거리는 경우. too fast play mp3 noise error sound

VS1053에게 mp3 파일 데이터를 보내는 함수가 다음과 같을경우

void VS1053_sdi_write(VS1053_InitTypeDef* vs1053,uint8_t* txbuff,uint16_t datasize)
{
if(vs1053->initialised)
{
while( HAL_GPIO_ReadPin(vs1053->DREQport,vs1053->DREQpin) == 0); //Wait while DREQ is low

SDI_DSEL();
SCI_DSEL();

SDI_SEL();

HAL_SPI_Transmit(vs1053->hspi,txbuff,datasize,vs1053->timeout);

SDI_DSEL();

}
}

위 함수는 datasize만큼 보내기 전에 vs1053의 fifo에 여유가 있는지 물어본 후 데이터를 보낸다.
문제는 datasize가 32byte ( vs1053이 최소한으로 가지고 있는 fifo의 여유 공간)을 넘는 경우
32바이트를 넘는 모든 정보는 사라진다.


따라서 아래처럼 32byte 단위로 보내야 한다.

아주 단순한 코딩 실수이지만 한참을 삽질했다.


void PlayMp3()
{
uint32_t wbytes; /* File write counts */
uint8_t read_buffer[32*100];

if(f_mount(&mynewdiskFatFs, (TCHAR const*)SD_Path, 1) == FR_OK)
{
//SDMMC_Format();

if(f_open(&MyFile, "test.mp3", FA_READ) == FR_OK)
{
uint32_t fetch =0; 

while(1)
{
f_read(&MyFile, read_buffer, 1024,&fetch);
HAL_Delay(1);

if(fetch >0)
{
for(int p = 0; p < fetch / 32; p++)
VS1053_sdi_write(&vs1053, &read_buffer[p*32], 32);
}
else
{
f_close(&MyFile);
break;
}
}
}
}

}


------------------------------
in send mp3 data to vs1053, check DREQ signal each 32 bytes frame.
DREQ is high when vs1053 has fifo spaces at least 32 bytes.
If you send over 32bytes, overflow data.