기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
리눅스 응용 프로그램에서 EBI를 제어를 하고 싶은데요.
현재 PPC460 CPU에서 CPLD를 제어를 할려고 합니다.
fd = open("/dev/mem", O_RDWR);
ptr = mmap(NULL, cpld_mem_size, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, cpld_mem_start);
위와같이 물리적인 CPLD 주소를 프로그램에서 접근할수 있게 mmap를 이용하여 주소값을 받아 옵니다.
값을 받은 후 특정 레지스터에 데이터를 쓰면 커널에서 에러 메시지가 아래와 같이 출력이 됩니다.
Machine check in kernel mode
Data Read PLB Error
Bus error
무슨 문제인지 잘 모르겠네요.
혹시 아시는 분 있으시면 답변 주시면 감사하겠습니다.
그럼 수고하세요.
address 지정이 잘 못 되었다는 얘기인 듯 싶습니다.
보통 mmap을 이용해서 외부 디바이스 접근시 발생하는 에러인데, 실제 address mapping에 문제가 있다는 얘기인 듯 싶네요.
CPLD로 나가는 address와 Chip select pin을 logic analyzer나 아니면 scope 다채널 정도로 찍어서 신호의 움직임과 timing을 확인해 보시기 바랍니다.