도와주세요!!
글 수 15,339
2008.06.13 09:49:55 (*.248.99.143)
12206
안녕하세요. EZ 보드를 사용하고 있지는 않지만 FALINUX에서 진행하는 무료세미나에도 여러번 참석해보고 임베디드 분야에서 일하고 있는 사람으로서 FALINUX의 명성은 잘 알고 있습니다.
저는 PXA320를 사용하여 SPI 인터페이스를 갖는 AT25F4096 이라는 ATMEL의 FLASH(eeprom)를 붙이고 있습니다.
먼저 PXA320의 SSP 인터페이스는 PXA27x와 거의 동일하며 SSP4번포트가 추가되었습니다.
현재 PXA320의 커널(커널 2.6.14.7)에 PXA2xx-spi.c 파일을 포팅하여 커널에 spi 버스를 생성하여 사용하고 있습니다.
AT25F4096을 붙이기 위해 공개되어 있는 at25.c 드라이버(at25160, at25320, at25640 등을 위한 드라이버)를 사용하고 있으며 신호등은 오실로스코프를 이용하여 정상확인하였습니다.
헌데 read 시에 문제가 발생했습니다. read 중하나인 RDSR(status 레지스터를 읽어오는 명령)의 경우를 예로들어 설명하겠습니다.
RDSR command의 타이밍도는 아래와 같습니다.
___ ___
CS \____________________________________________________________________________/
__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
SCK ____| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |____
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
__ __
SI X \___INSTRUCTION ______/ \ __ __/ \__ X X X X X X X X --------
DATA OUT
SO ------------HIGH IMPEDANCE-------------------------| 8 bit DATA |----------
위신호를 만들기 위해 PXA2xx-spi.c 에서 제공하는 spi_w8r8() 이라는 함수를 이용했습니다. 이 함수는 8비트 write 후에 8bit read를 실현해주는 함수입니다. 그런데 이 함수에서 8bit write(SI에 INSTRUCTION 입력) 이후 8bit read(SO에서 나오는 8bit 데이터를 받기위한 8클럭 생성) 사이에 gap 이 발생합니다. 제생각으로는 함수와 함수간 실행시 벌어지는 시간으로 예상됩니다.
이 gap으로 SO 가 출력되지 않는 현상이 발생해 버립니다.
혹시 해결가능한 방법이 있을까해서 문의 드립니다. 비슷한 예라든가.... 그럼 부탁드립니다. 감사합니다.
저는 PXA320를 사용하여 SPI 인터페이스를 갖는 AT25F4096 이라는 ATMEL의 FLASH(eeprom)를 붙이고 있습니다.
먼저 PXA320의 SSP 인터페이스는 PXA27x와 거의 동일하며 SSP4번포트가 추가되었습니다.
현재 PXA320의 커널(커널 2.6.14.7)에 PXA2xx-spi.c 파일을 포팅하여 커널에 spi 버스를 생성하여 사용하고 있습니다.
AT25F4096을 붙이기 위해 공개되어 있는 at25.c 드라이버(at25160, at25320, at25640 등을 위한 드라이버)를 사용하고 있으며 신호등은 오실로스코프를 이용하여 정상확인하였습니다.
헌데 read 시에 문제가 발생했습니다. read 중하나인 RDSR(status 레지스터를 읽어오는 명령)의 경우를 예로들어 설명하겠습니다.
RDSR command의 타이밍도는 아래와 같습니다.
___ ___
CS \____________________________________________________________________________/
__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
SCK ____| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |____
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
__ __
SI X \___INSTRUCTION ______/ \ __ __/ \__ X X X X X X X X --------
DATA OUT
SO ------------HIGH IMPEDANCE-------------------------| 8 bit DATA |----------
위신호를 만들기 위해 PXA2xx-spi.c 에서 제공하는 spi_w8r8() 이라는 함수를 이용했습니다. 이 함수는 8비트 write 후에 8bit read를 실현해주는 함수입니다. 그런데 이 함수에서 8bit write(SI에 INSTRUCTION 입력) 이후 8bit read(SO에서 나오는 8bit 데이터를 받기위한 8클럭 생성) 사이에 gap 이 발생합니다. 제생각으로는 함수와 함수간 실행시 벌어지는 시간으로 예상됩니다.
이 gap으로 SO 가 출력되지 않는 현상이 발생해 버립니다.
혹시 해결가능한 방법이 있을까해서 문의 드립니다. 비슷한 예라든가.... 그럼 부탁드립니다. 감사합니다.