하드웨어
글 수 321
2012.03.18 14:17:38 (*.40.163.61)
46624
예전에 잘 사용하든 DS1307 외부 RTC Chip이 요즘 나오는 Chip에서 에러가 발생하네요.
원인을 분석한 결과 아래의 내용 때문입니다.
static int __devinit ds1307_probe(struct i2c_client *client, const struct i2c_device_id *id)
710 tmp = ds1307->regs[DS1307_REG_SECS];
711 tmp = bcd2bin(tmp & 0x7f);
712 if (tmp > 60)
713 goto exit_bad;
714 tmp = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f);
715 if (tmp > 60)
716 goto exit_bad;
717
718 tmp = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
719 if (tmp == 0 || tmp > 31)
720 goto exit_bad;
721
722 tmp = bcd2bin(ds1307->regs[DS1307_REG_MONTH] & 0x1f);
723 if (tmp == 0 || tmp > 12)
724 goto exit_bad;
이 부분 ( 710 ~ 724 라인 ) 이 2.6.29 버젼 부터는 삭제되었습니다.
즉, 요즘 나오는 RTC Chip 의 초기 상태값이 위의 에러문 중 하나에 걸려서 칩을 인식하지 못하는 문제가 발생하네요.
혹시라고 2.6.29 버젼 이전 버젼에서 DS1307 외부 RTC Chip을 사용한다면
위의 부분의 주석 처리해야 정상적으로 Chip을 인식할 수 있습니다.