기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
저의 업무가 최근 Linux dirver 구현으로 바뀌어 linux를 삽질하고 있는 사람입니다.
이번에 PXA166을 이용하여 신규 기능 구현을 해야하는데, 한가지 문제점이 있어서 질문 드립니다.
일단 저희 시스템은 PXA166과 FPGA가 Bus로 연결되었으며, 그 Bus에는 Nor-Flash가 연결되어있습니다.
이 Bus를 이용하여 PXA166은 FPGA의 Register에 값을 읽고/쓰고, DMA로 대용량 데이터(15MB)를 읽고 있습니다.
그리고 USB WiFi로 대용량 데이터를 전송하고 있습니다.
현재는 DMA로 대용량 데이터를 다 읽은 후 WiFi로 전송하는.. 즉, 시리얼 구조로 되어있는데,
구현해야될 기능은 DMA로 일정 양만큼의 데이터를 읽으면서 WiFi로 전송해야하는 기능입니다.
여기서 나타날 수 있는 문제점은
DMA가 동작하는 동안 Linux Kernel이 (제가 알지 못하는 이유로) Nor-Flash를 읽을 경우 BUS가 충돌납니다.
이 문제는 제가 WinCE에서 이미 격었고, WinCE에서는 해결했는데, Linux에서는 어떤 방법을 써야할지 잘 모르겠습니다.
(물론 시간도 조금 부족하구요..)
제 생각에는 제가 작성한 DMA Driver와 Kernel의 MTD Driver간의 Bus 동기화(mutex?)를 해야할 것 같은데..
이게 가능할까요? 만약 가능하면 어떠한 방법을 써야하나요?
제가 생각하는 문제점을 해결할 수 있는 비슷한 코드는 없을까요?
답변부탁드립니다.
먼저, 저는 pxa166이 어떤 칩(?)인지 모르는 상태입니다.
즉, hw/sw 특성을 잘 모르는 상태라고 보시면 됩니다...^^
"일단 저희 시스템은 PXA166과 FPGA가 Bus로 연결되었으며, 그 Bus에는 Nor-Flash가 연결되어있습니다."
를 해결하셨으면....
아마도 Chip Select pin을 사용하셨을 겁니다. wince에서도 CS 핀을 가지고 address를 분리 하셨을텐데,
리눅스도 비슷합니다.
다만 드라이버를 작성하는 부분이 틀리기 때문에, 이는 커널 소스를 직접 다룰 수 있는 엔지니어가 필요한 상태라고 보여집니다.
Samsung이나 제가 다루는 칩이라면 example이라도 드리겠지만, pxa166은.........ㅠ.ㅠ 이네요.