도와주세요!!
삼성 2440A에서 CAM접속을 하기위해 프로그램을 작성중 셋업상의 문제인지 보드의 문제인지 알 수 없어 문의 드립니다.
증상으로는 CAMCLKOUT 출력이 정상으로 출력이 안되고 있습니다.
나름대로 확인해본 방법으로는
rMISCCR의 CLKSEL0,1를 이용하여 USBPLL CLK를 외부로 출력하여 보았는데 UPLL 출력은 정상으로 48M,96M가 정상 출력되고 있습니다, rCLKSLOW의 UCLK_ON 값을 조정하여 PLL ON-OFF상태 확인됨. 출력이 정상인 상태에서 캠클럭 확인 한 결과 입니다
그러나 캠클럭 출력은 48Mhz가 아닌 OSC 주파수가 출력되고 있습니다. rCAMDIVN기능에 의해 분주되는 결과는 정상적으로 입력 주파수에 대응하는 분주비로 정상 분주 됩니다. 입력이 UPLL로 되어야 하는데 OSC클럭 입니다.
또 다른 방법으로 DCLK에서 USBCLK를 사용하는기능이 있어 설정을 하고 MISCCR을 통해 확인 출력한 결과 OSC주파수로 입력되고 있는것을 확인 했습니다.
캠 클럭원이 UCLK인 48Mhz여야 하는데 이부분이 OSC로 고정되어 있으면 안되는것 아닌가요.
메뉴얼상으로는 USBPLL -> UCLK -> CAMCLKOUT 경로를 타는 것 같은데 잘 안되네요..
UPLL은 외부 출력으로 확인해본 결과 정상이니 셋업의 순서라든가 중간에 스위치가 있을 듯 한데 답답하네요..
혹시 위의 기술된 레지스터 이외에 캠클럭 출력을 설정하는 부분이 있는지 알고 싶습니다.
아니면 문제점을 해결할 수 있는 방법은 어떤한 방법이 있는지요.
수고하세요.
답글 감사합니다.
답변 감사합니다
제가 사용한 소스가 삼성 데모 프로그램의 일부를 수정하여 사용하고 있습니다
셋업부분에 차이가 없는듯 합니다.
제 보드에 문제가 있을지 몰라 혹시 확인이 가능 하시면 부탁 드리겠습니다
제가 설정한 부분이
외부 OSC 12Mhz 입력
UPLLCON = 0X380201; // 0X380202; 96Mhz; 48Mhz;설정
MPLLCON = 0X8\7F021; // 405Mhz FCLK
CLKSLOW.UCLK_ON = 0; // 1설정시 UPLL OFF
CAMDIVN.CAMCLK_SEL = 1;
CAMDIVN.CAMCLK_DIV = 0X00~0X0F; 분주비설정.
위와같이 설정하고 있습니다.
CAMCLK_SEL = 0 이면 12Mhz 출력
CAMCLK_SEL = 1 이고 CAMCLK_DIV = 0 이면 6Mhz 로 DIV값에 대응한 출력을 내고 있습니다.
혹시 가능하시면 위의 상태에서 CAMOUTCLK이 정상적으로 출력 되고 있는지 테스트가 가능 하신지요.
현재 제 보드에는 카메라 센서를 잘못 공급 받아 센서없이 출력 만 확인 하다가 문제가 생긴 경우 입니다.
특이 사항은 없을 것으로 판단 되지만 확인 해볼 수 없어서 어디부터 손을대야 할지 모르겠네요.
현재 상태로는 셋업 설정상의 문제라고 보이지만 확실한 부분이 없어서요.
부탁 드리겠습니다.
Camif_clk_init()함수대로 셋팅하니깐 48Mhz(MCLK)가 cam port에서 나왔습니다..이것을 이미지센서에 넣어주고 이미지센서 i2c로 셋팅하니깐 VCLK(MCLK/2)가 24Mhz/ H/VSYNC/ 8bit 데이타(YCbCr:422)가 cam port(YCbCr422->Preview RGB->FramBuffer->LCD)로 들어가는데요..
Fin을 바꾼 테스트를 말씀하신거라면 OSC 12Mhz도 없고, 지금 경황이 없어서 힘들것 같습니다...^^
12mhz는 16.934 osc를 구하기 힘들어 12mhz osc를 사용했습니다.
일단 제가 부탁드렸던 부분은 설명하여 주신 부분에 모두있는 듯 합니다.
해보고 싶었던 부분은 초기화 하였을시 제 보드의 fin이 12mhz이니까 출력이 12mhz 출력이 나오고있고 분주비를 적용하면 여
입력되 12mhz 대한 출력이 정상 적으로 나오고 있습니다. 결론은 12mhz 입력이 캠 클럭으로 사용되고 있다는 결론.
16.934를 사용한다면 출력이 16.934가 출력 될거라고 생각이 듭니다.
출력되는 12mhz라는 값이 usb의 분주비 값에 포함되기 때문에 정확히 fin이라고는 볼수 없을지 모르겠지만
이를 확인 할수 없어 더욱 갑갑하네요, 레지스터 셋업값은 별차이가 없는듯 한데,.,
일단 레지스터 값을 설정하면 48mhz 또는 96mhz 클럭이 출력되야 정상일 텐데,,,
일단 보드는 osc의 12m 사용하고 om(34) = 1,1로 exclk로 설정하여 사용합니다.
사용하시는 보드는 크리스탈 16.943mhz를 사용하고 있나요. 다르다면 이 부분만 하드웨어상으로는
틀린것 같으데 보내주신 Camif_clk_init()함수 만 제 프로그램에 이식하여 다시 테스트 해봐야 겠습니다.
프로그램을 f.w발식으로 하고있어 그대로는 사용할수 없을것 같네요 ..
감사합니다/.
자료실에 예전에 쓰던 F/W 코드 올렸습니다...참조하십시요..특히 option.h에 FIN==xxxx과 CamInit(),CCIR656Display() 참조 바랍니다...다운 받으시면 여기에 리플 남기십시요..자료는 추후에 삭제됩니다..
검토해본 결과로 의심 되는부분이 upll설정 하는 부분만 있는듯합니다.
2440계열이 리셋되고 재설정 하지 않으면 입력클럭이 설정된 레지스터 값에관계없이 출력
되는 것으로 알고 있습니다, 그래서 재설정을 해야만 제대로 된 설정 값이 출력 되는것으로 아는데
첫번째 질문사항의 실험으로 96mhz발진 되는것을 확인을 하였지만 클럭을 전환할 수 있는 기능은
리셋 후 upll의 재설정만이 입력 클럭에서 전환 할수 있는기능이 있는 듯 한데 무엇에 의한것인지
이 기능이 제대로 동작하지 않는듯 합니다. 하드웨어 상 다른 것이라면 크리스탈과 osc상의 차이점
뿐인데 이 부분에서 영향을 받는 건지 ...
자료 받았습니다.
감사 합니다.
제가 camera port 드라이버를 짜는중인데요...아직 미완성입니다...한 프레임마다 인터럽트가 발생해야 되는돼 안돼네요...카메라포트의 레지스터 가상주소계산이 제대로 된건지가 좀 의심스럽군요...
unsigned long *va =ioremap(..) -->레지스터 값이 오락가락..
unsigned char *va =ioremap(..) -->레지스터 쓴값 읽은값 동일..
void __iomem *va =ioremap(..) --> "
카메라(이미지센서)로부터 들어오는 파형들은 제대로 인데요..요기까지 첨부파일 참조 바랍니다...