마이크로칩사의 mXT640U라는 터치스크린 컨트롤러의 디바이스 드라이버를 일부 구현하며 정리한 글입니다.
maxtouch git에는 리눅스 드라이버 코드는 있는 것 같습니다만 bare metal 등 다른 환경에서 사용할 수 있도록 작성해봤습니다.
이 포스팅에서는 아두이노에서 진행했습니다.
터치스크린 컨트롤러에는 다양한 기능이 있지만 raw 데이터를 얻는 부분까지만 간단히 진행했습니다.
최대 32 * 20개의 노드를 지원하는 터치스크린 컨트롤러입니다. 인터페이스는 I2C를 지원하고 디버그 목적으로 SPI 인터페이스도 지원하지만 양산 적용 목적으로는 권고하지 않는다고 하네요.
정전식 터치 스크린은 피부가 닿으면서 변화하는 커패시턴스의 값을 통해 터치 유무를 판단합니다. 저는 여기서 커패시턴스의 raw 데이터를 수집할 목적으로 일부 디바이스 드라이버를 작성했습니다!
I2C 라인에 풀업 저항 Rp가 연결되어 있습니다. 이 풀업 저항에 따라 I2C 클럭 최대 속도 지원이 바뀝니다. 개발 키트에는 기본적으로 400KHz 속도까지 지원하도록 설정되어 있습니다. 1MHz 등 더 높은 속도를 원한다면 회로를 수정하거나, SPI 인터페이스를 지원하는 제품군을 선택하면 좋을 것 같네요.
다른 핀에 대한 설명은 생략하겠습니다.
보통 I2C 인터페이스를 사용하는 비교적 간단한 기능의 센서, 장치의 경우 레지스터 맵이 제공되는데, 해당 제품은 메모리 맵을 제공합니다. 기본적인 구조는 오브젝트 테이블에서 오브젝트의 주소를 얻은 후, 해당 주소에 접근하여 각 오브젝트에서 제공하는 기능을 사용하는 방식입니다.
예를 들어 제가 필요로 하는 raw 데이터는 T37이라는 오브젝트에서 얻을 수 있습니다. 여기서는 오브젝트를 T1, T2 처럼 T+숫자의 형태로 표현되고 있습니다.
일부 다른 기능도 있지만 maxtouch 제품군은 이와 같이 오브젝트를 통해 데이터를 얻는 방식이라 maxtouch 제품에 두루두루 적용할 수 있을 것 같습니다.
각 항목에 대한 자세한 설명은 생략하겠습니다.
간단하게 작성된 동작 흐름입니다.
T37은 디버그 오브젝트로, raw 데이터를 얻을 수 있는 오브젝트입니다.
해당 오브젝트를 사용하기 위해 필요한 초기화를 진행하고, T6이라는 커맨드 오브젝트를 이용하여 T37의 모드를 제어하고 데이터를 얻는 구조입니다.
약 1초 정도의 주기로 raw 데이터를 얻는 것을 확인했습니다.
400KHz로 최대 속도가 회로적으로 설계되어 있지만 실제로는 약 870KHz까지 동작하는 것을 확인했습니다.
테스트를 진행하면서 알게된 부분은, I2C 클럭 속도를 높히더라도 데이터 수집 주기가 짧아지지는 않았습니다. 이유는 데이터 시트에서 확인할 수 있었습니다.
T37에서 데이터를 읽기 위해서는 T37 오브젝트의 페이지를 변경하며 데이터를 읽어야 하는데, 이 페이지 변경 명령이 수행되는 시간이 꽤 길게 소요되어 I2C 클럭 속도와 상관 없이 raw 데이터 수집 주기의 한계가 있습니다.
포스팅은 여기까지입니다! 기회가 되면 나머지 부분도 구현해서 테스트 진행해보겠습니다.