[질문] AMOLED 패널 구동

rlatjrdnjs의 이미지

안녕하세요 임베디드 공부를 하고있는 대학생입니다.

현재 AMOLED 패널을 구동시키는 프로젝트를 하고 있습니다.

자세한 프로젝트 내용은 다음과 같습니다.

사용하는 패널모듈은 삼성에서 나온 AMS369FG06-0 (3.7" Visual WVGA 480x800 16M Color) 이고 TOMATO LSI사의 TL2796을 driver IC로 사용합니다.

구동 보드는 HYBUS사의 PDK3200보드에서 CPU보드만 떼어네고 인터페이스 보드를 제작하여 (패널모듈+인터페이스보드+시피유 보드)를 연결하였습니다. CPU보드에 사용되는 MCU는 삼성의 S5PV210입니다.

HYBUS사의 PDK3200은 CHIMEI사의 C0240QGLA-T AMOLED 패널을 포함합니다.

현재 CHIMEI 패널을 구동시키는 예제 프로그램을 분석하여 구동시키려는 삼성 패널의 driver IC의 레지스터값과 RGB interface, SPI interface를 세팅하고 구동을 시도 하였으나 구동이 안되고 있습니다ㅠㅠ

문제의 원인으로

1 레지스터 값이 제대로 설정되지 않았다.

2 프레임버퍼 관련 세팅이 잘못 되었다. 프레임 버퍼 관련 세팅은 다음과 같이 합니다.

//
//lcd_info 구조체 설정
//
fb_dev=open("dev/fb_con",O_RDWR)
ioctl(fb_dev,_IOCTL_FB_CON_INIT,&lcd_info)

레지스터 값또한 비슷한 방식으로 ioctl함수를 사용합니다.

위 두가지 문제가 가장 큰 문제라고 생각되는데 어떻게 문제를 해결해야 할지 감이 잘 잡히지 않습니다....

추가적으로 위의 ioctl 함수의 원형을 찾는 중 /Kernel/Kernel_2.6.32_pdk3200_V1.2.11/drivers/vided/samsung/s3cfb.c 라는 파일을 발견 하였는데

구글링을 통해 찾아보아도 정확히 어떤 역할을 하는지 알 수 없었습니다.(lcd driver로 추정 하고 있습니다.)

[질문]
어떻게 해야 문제를 해결 할 수 있을까요?
s3cfb.c는 어떤 역할을 하는 파일인가요??

혹시 AMOLED 패널 또는 LCD 패널 구동해 보신 분 계시면 개발 과정이나 어떤 순서로 일을 진행해야 할지 조언부탁 드립니다.

일이 막연해서 진행이 잘 안되네요

감사합니다.

rlatjrdnjs의 이미지

글이 두개가 등록됐네요 어떻게 하나를 삭제할까요ㅠ

shint의 이미지


ioctl 함수
msdn ioctl 로 네이버. 구글. 다음에서 찾으면. 많이 나옵니다.

s3cfb.c 로 찾아보니. 색상을 설정한다고 나오고.
임베디드로 찾아보니. 포팅을 할때. 모듈을 잘 올려야 한다고 나오네요.

임베디드 카페
당그니 카페
임베디드 기업. 학원. 전문대. 직업학교. 등에 문의

도서관. 서점. 책. 확인

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

모르면 답변을 달지 마세요. 이런 성의없는 답변 좀 그만 달고.

익명 사용자의 이미지

'shint'님 화이팅!

rlatjrdnjs의 이미지

이것저것 많이 찾아보고 시도 해 보았는데

제가 실력이 부족한지 아직 감이 잘 잡히지 않네요

rlatjrdnjs의 이미지

오픈소스로 코드를 찾을 수 있다는 것을 알았네요

이 예제들을 사용하려면 커널을 새로 컴파일을 해야할까요

아니면 수정을하여 모듈프로그래밍을 통해 모듈을 적재하여 사용하여야 할까요

내용이 방대해서 난해하네요...

bushi의 이미지

어떻게 사용하시건 마음대로 사용하셔도 됩니다.
단, https://android.googlesource.com/kernel/samsung/+/android-samsung-3.0-jb-mr0/arch/arm/mach-s5pv210/mach-herring.c 에서 호출하는 spi_register_board_info() 함수는 커널 모듈에서 사용할 수 없습니다.

필요한 부분만 발췌해서 어플리케이션으로 만들어 테스트하셔도 될 것 같은데요.
현 상황이... 커널은 둘째고, 일단 가지고 계신 OLED 패널을 켜서 동작시켜 보는게 우선이라 생각합니다.
이런 말씀드리는게, 실제로 위에 나열한 링크의 코드가 절대 방대하지 않기 때문입니다.
linux kernel 의 spi subsystem 을 활용하기 위한 device 등록, driver 등록.
그리고 GPIO 를 이용해서 spi 를 에뮬레이션 해주는 커널 드라이버를 활용하기 위한 GPIO 핀 데이터를 가진 device 등록
위의 두 개만 linux 커널과 관계 있을 뿐입니다.
나머지 대부분은 tl머시기 칩과 관계 있고, 일부는 커널의 s3c fb(프레임버퍼) 드라이버와 관련된 코드입니다.
몇 줄 되지도 않는 곁가지 때문에 시간 보내지 마시고, 그냥 제끼고 핵심으로 바로 들어가세요.
어플리케이션에서 GPIO 를 사용하는 방법, 그리고 SPI 스펙의 mode 3 타이밍 차트 정도만 파악하시면 됩니다.

rlatjrdnjs의 이미지

감사합니다 정말 큰 도움이 됐습니다.

우선 패널을 구동시키기위해 어플리케이션에서 GPIO, SPI사용하는 법부터 공부해야겠네요

실례가 안된다면 몇가지 더 여쭤볼게요ㅠ

위와같은 공부를 할 때 리눅스 디바이스 드라이버(GPIO,SPI)를 공부하면 될까요?

공부를 한다면 여러가지 방법이 있을텐데 구글링을통해 공부를 할 수 있고 도서관에서 책을 찾아볼수도 있을텐데

어떤 방법이 빠를 수 있을까요?

시간이 많아 모두 찾아보면 좋겠지만 시간이 지날수록 맞는 방향으로 가고있는지 알수가 없어서 마음만 급해지네요

bushi의 이미지

커널 디바이스 드라이버 공부(GPIO, SPI)도 하시면 많은 도움이 되실 것이고, 아마 싫어도 해야만 하는 순간이 머지않아 닥칠거라 생각합니다.

커널 gpio lib 에 대한 문서는 커널 소스의 Documentation/gpio.txt 입니다.
"Sysfs Interface for Userspace (OPTIONAL)" 항목의 것들이 어플리케이션 작성에 대한 내용입니다.
커널 코드 예제들은 커널 소스 내에 과할 정도로 많으니 골라 보시면 될 것이고요,
어플리케이션의 경우엔 예제랄게 필요없을 정도니 문서만 한 번 읽어보셔도 됩니다.

커널 SPI subsystem 에 대한 문서는 커널 소스의 Documentation/spi/spi-summary 이고,
어플리케이션 문서는 커널 소스의 Documentation/spi/spidev, 예제는 Documentation/spi/spidev_test.c 입니다만,
만약 GPIO 직접 제어를 통해 SPI 를 에뮬레이션하셔야 하는 상황이라면 위의 것들이 필요없습니다.
대신 https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus 를 읽어보셔야 합니다.
특히 "Clock polarity and phase" 항목을 이해하셔야 그 TL머시기 하는 칩을 제대로 제어할 수 있습니다.

rlatjrdnjs의 이미지

감사합니다. 말씀해주신 경로를 따라서 문서를 찾았습니다.

많은 도움 주셔서 감사합니다.

furmuwon의 이미지

- samsung Display Controller (FIMD) driver 랍니다. (소스 마지막 MODULE_DESCRIPTION 에 적혀 있네요)

- frame data가 저장될 영역의 연속된 메모리를 할당 합니다.
s3cfb_alloc_framebuffer, s3cfb_map_video_memory 함수

- 리눅스 프레임버퍼 드라이버(프레임워크) 에게 나도 프레임 버퍼 입니다 하고 등록 합니다.
s3cfb_register_framebuffer 함수

- 더블 퍼버및 다중 버퍼에 오프셋을 변경 합니다.
s3cfb_pan_display 함수

- 리눅스 프레임버퍼 드라이버의 추상화 오퍼레이션에 실제 오퍼레이션을 연결 합니다.
struct fb_ops s3cfb_ops

- display controller가 frame data를 lcd로 전송하도록 on/off 합니다.
s3cfb_blank 함수

- display controller 의 vsync 인터럽트 핸들러가 있습니다.
s3cfb_irq_frame

- vsync 가 뜰때까지 잠듭니다.
s3cfb_wait_for_vsync

아마 이 드라이버에는 문제가 없을 겁니다.

rlatjrdnjs의 이미지

설명 감사합니다.

furmuwon님은 위 함수를 분석할때 함수의 원형 분석하여 위와같은 역할을 한다는 것을 아셨나요?

아니면 위 함수들이 설명되어 있는곳이 따로 있는건가요?

furmuwon의 이미지

커널 프레임 버퍼 드라이버 분석 경험입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.