도와주세요!!
답변이 없어서 다른 방식으로 다시 글 올려봅니다.
PXA에서 SSP를 사용하기 위해 kernel2.6/spi/pxa2xx_spi.c , spi.c 드라이버를 사용하고 있습니다.
이 드라이버에서 제공하는 함수중에 spi_write 함수가 있습니다.
제가 사용하는 at25f4096 칩은 8비트 짜리 read 명령을 받으면 8bit 짜리 데이터를 출력해줍니다.
그래서 spi_write 함수를 이용하여 8비트 read명령과 8bit 더미 비트를 합친 16 비트를 write하도록 명령을 주었습니다.
스코프로 보았을때 8bit read 명령이 write(SI) 된 후에 8bit 데이터가 SO 신호를 타고 나오는 것을 확인하였습니다.
하지만 SSSR 레지스터를 읽어보면 f004 에서 f024로 설정만 됩니다.
즉 Rx 된 데이터(RNE = 0 )가 없는것처럼 나옵니다.
왜그런가요? 연속 write 하기 위한 조건이 따로 있는것인가요? 연속 write가 아닌 8비트를 write 해주며 안되는건가요?
제 생각엔 두번의 write가 나가면서 FRM(CS)가 중간에 뜨면 안되는데 8bit 와 8bit 사이에 떠서 그런것 같습니다.
해결방법은 무엇인가요?
음.. 제가 SSP를 잘몰라서 생긴 문제인것 같습니다.
pxa2xx_spi.c 를 사용하지 않고 따로 SSP 레지스터를 직접 엑세스 해서 일단 해결했습니다.
아래는 제가 찍어본 레지스터 예와 읽어온 값들입니다.
read Device ID
at25f_get_deviceID
at25f_get_deviceID 2. SSSR_P(4) = 0x0040f024
at25f_get_deviceID 3. SSSR_P(4) = 0x0000017c
at25f_get_deviceID 3-1. SSSR_P(4) = 0x0000206c
COREBELL ssp_read_word read_data 206c
COREBELL ssp_read_word read_data 206c
at25f_get_deviceID 4. SSSR_P(4) = 0x0000106c
1 data = 0,
COREBELL ssp_read_word read_data 106c
COREBELL ssp_read_word read_data 106c
2 data = 1f,
COREBELL ssp_read_word read_data 6c
COREBELL ssp_read_word read_data 6c
3 data = 64,
3 at25f_get_deviceID
devID = 64,
device ID = 64
결과적으로 기대했던 1F64를 읽어 왔습니다.
그런데 status 레지스터의 값을 계속 0x0 으로만 읽어 오네요. ㅠ.ㅠ
status register는
nWPEN | X | X | BP2 | BP1 | BP0 | WEN | nRDY
로 8비트로 구성이 되어 있습니다. 여기에서 하드웨어 라인인 nWP 가 high 이기 때문에 WEN 이 1로 떠야 레지스터라든가 eeprom 에 기록이 가능해 지는데... 계속 0x0 만 출력되니... 기록을 할 길이 없습니다.
혹시 사용해 보신분은 좀 도와 주세요~~~~
헐...
데이터시트를 읽었어도 이해를 못해서 발생한 문제네요... ㅠ.ㅠ
WREN을 보낸후에 RDSR을 받으면 WEN 비트가 HIGH로 나옵니다. ㅠ.ㅠ
이젠 드라이버랑 유저 프로그램만 적절히 작성하면 되겠습니다. ㅠ.ㅠ
pxa270 ssp를 이용하여 spi를 구현하였는데요 .
master가 slave에서 데이이터를 받기위해서 mosi 으로 먼저 데이터 요청 cmd(16bit)를 보내고
master 쪽에서 16bit clear bit를 전송합니다. clear bit(0x0000) Write 하면 클럭에 발생하고 클럭에 맞게
miso 라인에서 데이터가 전송되는 파형이 나오는데요.. .. (u16) data = SSDR_P2; 를 하였을때..
데이터가 제대로 나오지 않습니다. ;;; ㅠㅠ
read 하는 방법이 잘못된가요??
먼저 중간에 frame(CS)가 다시 뜨거나 하는 문제는 아니네요.
정말 이상하네요. 분명히 SI로 들어간 명령에 따라 다음 클럭부터 SO로 데이터가 나왔는데... 왜 PXA는 SSSR에 RNE와 RFL 에 Rx관련 데이터가 없다고 나오는건가요?? 아....... ㅠ.ㅠ