현재까지 밝혀진 문제와 직면한 문제들에 대한 대처방법에 대해 설명하고 있다.
여기서는 크게 하드웨어와 소프트웨어 부분으로 나눠서 설명하겠다. 참고로 이 문서는 7710 cut 2.1 을 기준으로 한다. 유의하기 바란다.
H/W 문제점
2.5V 와 1.2V 전원 쇼트 및 크리스털 문제
7710 조립 후에 2.5V 와 1.2V 를 테스터기로 측정한 결과, 쇼트가 되는 문제가 있었다.
또한 27MHz 크리스털이 전혀 파동이 없는 문제가 있었다.
7710 과 DDR 의 통신문제
프로그램이 'SETUP DLL' 에서 에러가 났다.
UART 통신문제
이미 7710 cut 2.1 버그 리스트에 나온 문제이다. CTS 와 RTS 가 반대가 되어서 제대로 통신을 할 수 없는 문제이다. 일단 cut 3.0 에서는 수정된다고 했으니, 기다려보는 수밖에 없다.
H/W 해결책
1. 일단 먼저 2.5V 와 1.2V 전원이 쇼트 나는 문제는 회로도의 'R262' 를 뗐더니, 더이상 쇼트가 되지 않았다. 아마도 RST 에 붙은 저항 때문에 계속 리셋을 했던 모양이다. 크리스털 문제는 앞에 붙은 'R288' 을 '0 옴'으로 수정함으로서 해결되었다.
* 회로도의 'R346' 을 떼내었다. 5517 의 경우는 EMI_REQ 를 high 로 잡았지만, 7710 에서는 오픈 시켜야 한다.
S/W 문제점
Video 안나옴
Testapp1 의 경우 내부스트림을 사용해서 Video 를 재생할 수 있었다. 하지만, HSYNC 와 VSYNC 를 나오는 상태에서 RGB 에서 데이터가 나오지 않는 문제가 있었다.
Audio 안나옴
Testapp4 의 경우 각 확장자들(mpeg1, mpeg2, mp3, pcm 등)을 재생시킬 수 있다. 현재 7710 보드에는 L/R 과 SPDIF 출력 단자가 있다. 프로그램 수행시 SPDIF 의 경우 문제없이 동작하였지만, L/R 의 경우 잡음이 섞여 나오는 문제가 있었다.
EEPROM R/W 가 안됨
현재 보드에서 I2C 를 사용하는 것은 EEPROM 과 TUNNER 이다. 그 중에 간단하게 시험해 볼 수 있는 EEPROM 을 테스트해봤다. 하지만 R/W 를 하지 못하는 문제가 있었다.
S/W 해결책
DDR Clock 을 133 으로 수정해준다. mb391.cfg 파일을 수정한다
STi7710InitPLL(133)
Testapplication 을 기반으로 한 Brick Board 와 현재 내가 조립한 보드와 Audio Decoding Chip 이 달랐다. STAUD 의 초기화시에 몇가지 옵션을 수정한다
STAUD_InitParams.InternalPLL = TRUE; STAUD_InitParams.DACClockToFsRatio = 256; STAUD_InitParams.PCMOutParams.InvertWordClock = FALSE; STAUD_InitParams.PCMOutParams.Format = STAUD_DAC_DATA_FORMAT_STANDARD; STAUD_InitParams.PCMOutParams.InvertBitClock = FALSE; STAUD_InitParams.PCMOutParams.Precision = STAUD_DAC_DATA_PRECISION_16BITS; STAUD_InitParams.PCMOutParams.Alignment = STAUD_DAC_DATA_ALIGNMENT_RIGHT; STAUD_InitParams.PCMOutParams.MSBFirst = TRUE;
EEPROM 이 사용하는 I2C 라인이 달랐다. 총 2개의 라인이 있는 데, 1번이 아닌 0번 이었다. testapps/shared 아래에 있는 i2c.c 파일을 다음과 같이 수정해주었다.
void initEprom() { U8 writeData[14],data[2],i; U32 actDataLen; ST_ErrorCode_t errCode = ST_NO_ERROR; STI2C_OpenParams_t OpenParams; OpenParams.I2cAddress = 0xa0; OpenParams.AddressType = STI2C_ADDRESS_7_BITS; OpenParams.BusAccessTimeOut = STI2C_TIMEOUT_INFINITY ; errCode=STI2C_Open(I2C_DeviceName[0], &OpenParams, &h24C32); // 1 을 0 으로 수정 if(errCode==ST_NO_ERROR) bEepromState=TRUE;