본문 바로가기

Embedded/ODROID-X2

I2C Clock Frequency 변경

I2C Port Clock Frequency설정에 대한 자료는 없다.

arch/arm/mach-exynos/mach-odroid-x.c에서는 I2C Frequency 설정 부분이 없다.

기본 BSP만 포팅한 것 같다.

1주일동안 삽질 후 찾았지만 정확한 주파수로 동작하지는 않지만 대충은 맞다.

1. I2C Clock설정을 추가한다.

...

struct s3c2410_platform_i2c i2c5_data_odroidx  __initdata = {

.bus_num    = 5,                                          // The bus number to use (if possible).

.flags          = 0,                                          // Any flags for the I2C bus (E.g. S3C_IICFLK_FILTER).

.slave_addr  = (TS_I2C_SLAVE_ADDR >> 1), // The I2C address for the slave device (if enabled).

.frequency   = 430*1000,                             // The desired frequency in Hz of the bus.

                                                                        // This is guaranteed to not be exceeded.

.sda_delay   = 100,                                      // The delay (in ns) applied to SDA edges.

};

2. 설정한 변수 값을 아래와 같이 수정한다.

...

//s3c_i2c5_set_platdata(NULL);

s3c_i2c5_set_platdata(&i2c5_data_odroidx);

i2c_register_board_info(5, i2c_devs5, ARRAY_SIZE(i2c_devs5));


3. 참고로 s3c2410_platform_i2c 구조체에서 frequency 값은 400*1000으로 설정하면  I2C Frequency가 200KHz 근처에서 동작한다. 

   왜그런지는 나도 모른다. 아직 내부 코드를 뒤져보지 못했다.

  가끔씩 개발들이 무시해야하는 경우가 대부분이다. 왜냐면 늘 고민할 시간을 개발자에게 주지 않기 때문이다.

  나는 I2C Frequency  400KHz 동작이 필요해서 값을 무식하게(임으로 바꿔가면서) 찾은 값이다.

  필요한 클럭은 값을 바꿔 찾아 봐야 할 것 같다.


이래서 삼성 BSP에 늘 불만이다. 뭔가 늘 부족하다.