Infineon AURIX TC237 사용기(3) - PC와 시리얼통신을 위한 VCP(가상컴포트) 설정방법

임베디드/MCU 2016.08.08 00:37

 일반적으로 MCU 보드를 제공하는 회사 내의 소프트웨어 툴 내에는 USB를 통해 PC와 시리얼통신을 할 수 있도록 해주는 드라이버를 기본적으로 제공합니다. 보통은 USB를 연결하자마자 바로 가상의 포트(VCP, Virtual Com Port)가 설치되어 MCU와 통신이 가능하게 설정됩니다. 그러나 몇몇 제품의 경우 우리들이 직접 VCP를 설정해줘야 하는 경우가 있습니다. Infineon에서 제공하는 보드의 경우 PC에 연결하기 위해 Infineon에서 제공하는 ASCLIN(Asyncronous Syncronous Communication Local Interconnect Network, 보편적으로는 UART통신이라 부름)통신을 사용하여야 하는데 이를 위해 PC에 VCP드라이버를 직접 설치해주어야 합니다.



 Infineon TC237과 PC와 시리얼통신을 하기 위해서는 Infineon에서 제공하는 DAS Tool Interface를 설치해야 합니다. 이전에 TriCore™ Entry Tool Chain을 설치하는 과정에서 DAS도 함께 설치되므로 TriCore™ Entry Tool Chain을 설치하셨을 경우 아래 DAS Tool Interface를 설치하는 과정을 생략하여도 됩니다.

 


1. DAS Tool Interface를 설치하기 위해 아래 링크에 접속합니다.


http://www.infineon.com/cms/en/product/promopages/das/




2. DAS 최신버전을 다운로드 받습니다. 위의 회면에서 보았을 때 DAS v5.0.0을 클릭합니다.



3. 위 화면에서 붉은 네모칸 부분을 클릭하여 DAS를 다운로드 합니다. 압축파일을 열었을 경우 아래와 같이 DAS_v500_setup.exe 파일을 확인하실 수 있습니다.



 4. DAS 설치파일을 실행합니다. 실행 후 'Next' 버튼을 클릭합니다.



5. a 버튼을 눌러 체크한 후 'Next' 버튼을 클릭합니다. 이후 나오는 경로 설정 등을 자신의 컴퓨터에 맞게 설정해줍니다.



6. 설치가 완료되면 아래와 같은 화면을 보실 수 있습니다. 'Finish'버튼을 클릭하여 설치를 완료합니다.

(몇몇 컴퓨터의 경우 DLL에러로 더이상 진행이 되지 않는 경우가 있습니다. 이 경우 운영체제를 다시 설치하여 진행하시는 것이 건강에 매우 이롭습니다. 그 이외의 방법은 상당히 많은 시간이 소요될 것으로 예상됩니다.)



7. 이제 MCU 보드와 PC를 USB로 연결해줍니다. 잠시후 USB 드라이버가 자동으로 설치됩니다.



8. USB 드라이버가 제대로 설치되었는지 확인합니다. 만약 제대로 설치되었을 경우 아래와 같은 화면으로 확인이 가능할 것입니다.(Windows 10 기준)



9,  Windows+Pause 키를 눌러 시스템 화면으로 진입합니다. 또는 windows 탐색기에 '시스템'을 검색하여 시스템 화면을 엽니다. 그 다음 '장치 관리자'를 클릭합니다.



10. '범용 직렬 버스 컨트롤러' 메뉴를 연 후 이전에 확인하였던 드라이브명을 찾아봅니다. 다음 오른쪽 클릭 후 '속성(Property)'을 선택합니다.



11. '고급' 탭 선택 후 'VCP드라이버 설치'를 클릭한 후 '확인'버튼을 클릭합니다.



12. 연결된 USB를 컴퓨터에서 분리한 후 다시 연결하면 다시 드라이버 설치가 진행됩니다. 설치가 완료된 후 장치 관리자에서 '포트(COM & LPT)' 메뉴를 열어보면 가상 시리얼포트가 설정된 것을 확인하실 수 있습니다.




 이제 시리얼통신 프로그램(ComPortMaster 또는 Teraterm)을 사용하여 보드와 PC간의 Serial 통신을 사용해보시길 바랍니다!

Infineon AURIX TC237 사용기(2) - TriCore™ 컴파일 후 프로그램 실행

임베디드/MCU 2016.06.26 22:49

 지난 포스팅에서 Infineon사의 TC23x 시리즈를 사용하기 위해 사용되는 IDE인 TriCore™ Entry Tool Chain을 설치하는 과정을 진행하였습니다. 이어서 프로그램을 컴파일한 후 실행하는 과정을 살펴보도록 하겠습니다.

 시작하기에 앞서 아래 예제 프로젝트를 다운로드 받아 주시길 바랍니다.


TC237L_Example.zip



1. 위 프로젝트 파일을 받으신 후 IDE를 실행한 다음 아래의 화면과 같이 HighTec Project Explorer 화면 위에서 마우스 오른쪽 버튼을 클릭한 후 'Import' 버튼울 눌러줍니다.




2. 아래와 같은 창이 나타났다면 General -> Existing Projects into Workspace 를 선택해줍니다.



3. 'Select archive file'을 선택해주신 후 'Browse' 버튼을 클릭하여 다운로드 받았던 프로젝트 파일을 선택합니다. 아래와 같은 화면이 나타난다면 아래에 있는 'Finish' 버튼을 눌러줍니다.



3. 완료시 아래와 같이 프로젝트가 import된 것을 확인하실 수 있습니다. 이제 바로 해당 프로젝트 파일을 컴파일해 보도록 하겠습니다. 프로젝트를 선택해주신 후 아래 그림에서 붉은 색으로 표시한 아래화살표 부분을 클릭해줍니다.



4. build 방식을 선택하는 메뉴입니다. 프로젝트를 컴파일 하기 위해 'Build project...'을 클릭합니다. 만약 컴파일이 제대로 이루어지지 않는 경우 아래칸의 'Clean project...'을 실행한 후 다시 컴파일을 시도합니다.



5. 컴파일이 완료되었다면 생성된 바이너리를 MCU에 다운로드 해보도록 하겠습니다. 아래 화면에서 디버그(벌레그림)버튼의 오른쪽에 있는 아래화살표를 클릭한 후 'Debug Configurations...'을 클릭합니다.



6. 아래와 같이 'Debug Configurations' 창이 뜨면 메뉴 맨 아래에 있는 'Universal Debug Engine'을 클릭한 후 붉은 표시를 한 부분을 눌러 새로운 환경을 추가시켜줍니다.



7. 해당 예제를 디버그할 수 있는 환경을 만들어준 후 생기는 오른쪽 창 메뉴 중 'UDE Startup'을 클릭한 후 두 번째 빈칸 오른쪽에 있는 'Create Configuration'을 클릭합니다.



8. 'Use a default target configuration'을 클릭한 후 'TriCore -> Infineon -> TC23x StarterKit -> Triboard with TC23x (DAS)'를 선택 후 '마침' 버튼을 클릭합니다.



9. 선택한 설정파일을 저장합니다. 이후 다른 프로젝트를 실행할 때 선택하여 사용할 수 있도록 적당한 곳에 저장해둡니다.



10. 이제 디버그를 할 수 있는 환경이 모두 구축되었습니다. 아래 붉은 색으로 표시한 'Debug' 버튼을 클릭하여 디버그 모드로 진입합니다.



11. 디버그 모드에 진입하게 되면 아래와 같이 MCU에 프로그램을 올릴 수 있는 단계에 도달하게 됩니다. 붉은 색으로 표시된 'Program All' 버튼을 클릭하여 컴파일 된 프로그램을 MCU에 다운로드 해줍니다.



12. 컴파일된 프로그램이 MCU에 다운로드가 완료되면 아래와 같이 초록색 칸이 모두 채워집니다. 'Exit' 버튼을 클릭하여 메뉴를 닫으면 디버그를 수행할 수 있습니다.



13. 이제 TC237의 RESET 버튼을 누르면 내장된 프로그램이 동작하는 것을 확인하실 수 있습니다.


  • 양현민 2017.05.13 21:29 ADDR 수정/삭제 답글

    정말 도움이 되는 글이었습니다. TC237 프로그래밍에 대한 정보를 찾아도 좋은 정보가 없었는데 덕분에 살았네요 정말 감사합니다 ㅠㅠㅠㅠ

  • 홍민기 2018.04.11 16:42 ADDR 수정/삭제 답글

    8번 단계에서 TC23X starterkit 이 없으며, Triboard with TC23X (DAS)가 없습니다.
    그리고 다른 것을 선택해 진행을 하면, can't connect JTAG target, can't connect target 이라고 오류만 뜹니다.
    이럴 경우 어떻게 해야하는지 궁금합니다. ㅠㅠ

    • Justin T. 2018.04.11 16:47 신고 수정/삭제

      DAS 툴이 제대로 설치되지 않은 것으로 보입니다. 다시 설치하신 후 다시 시도해보시길 바랍니다.
      간혹 컴퓨터의 문제때문의 경우도 있으므로 다른 컴퓨터를 사용하여 다시 시도해보시길 바랍니다.

  • 이수빈 2018.06.25 23:01 ADDR 수정/삭제 답글

    due 버젼이 4.4 에서 4.10로 바꿔져 있더라구요. 그러면서 Triboard with TC23X (DAS) 이게 Triboard with TC23X A_Step 으로 바뀐거 같아요. Triboard with TC23X (DAS) 이 파일은 어떻게 구하죠?

Infineon AURIX TC237 사용기(1) - TriCore™ Entry Tool Chain 설치하기

임베디드/MCU 2016.04.26 00:31

 이번에 기회가 되어 Infeneon의 AURIX TC23x 시리즈 MCU를 만져보게 되면서 이와 관련된 자료들을 블로그로 포스팅 해볼까 합니다. 이전에 TI사의 Tiva C 시리즈를 다루던 당시처럼 관련 내용을 다룬 국내의 포스팅이 없어 TI 콘테스트를 준비하던 당시처럼 맨땅에 해딩하는 듯한 기분이 없지않아 느껴집니다.


 TI사의 MCU를 사용하기 위해 Code Composer Studio를 사용하듯이 이번에 다루는 Infineon사의 AURIX TC23x 시리즈의 MCU를 사용하기 위한 통합개발환경인 TriCore™ Entry Tool Chain이 필요합니다. 이를 얻기 위해 HIGHTEC이라는 사이트에서 TriCore™ Entry Tool Chain의 컴파일러를 사용할 수 있는 라이센스를 무료로 발급받으시면 됩니다.


http://free-entry-toolchain.hightec-rt.com/



 위 사이트의 화면에서 보시는 바와 같이 오른쪽 부분에 이름, 이메일주소 등의 신상정보를 입력하신 후 TriCore™ Entry Tool Chain을 사용하고자 하는 PC의 MAC어드레스를 입력해야 합니다.

 컴퓨터의 MAC어드레스를 알아내기 위해 CMD를 통해 명령어를 입력하여야 합니다. '윈도키+R'를 누른 후 cmd를 입력하시어 명령 프롬포트를 실행합니다.


위 화면의 경우 Windows 10 작업표시줄에 있는 검색창을 통해 cmd를 입력한 모습입니다.


 명령 프롬포트를 실행하신 후 다음과 같이 명령어를 입력해줍니다.

> ipconfig/all



 실행하시면 보시는 바와 같이 자신의 컴퓨터에 할당된 MAC어드래스(물리적 주소)를 확인하실 수 있습니다. 만약 자신의 PC가 랜선을 연결하여 인터넷을 하는 경우 '이더넷'을, 와이파이를 통해 인터넷을 하시는 경우 'Wi-Fi'에 있는 MAC어드래스를 입력하시면 되겠습니다. 만약 가상머신을 사용하여 인터넷을 사용하시는 경우 해당 가상머신에 할당된 MAC어드래스를 사용하시면 되겠습니다.



 자신의 신상정보를 모두 입력하셨을 경우 위와 같이 라이센스가 성공적으로 발급되었음을 확인하실 수 있습니다. 발급된 라이센스는 'Download "license.lic"'를 통해 다운받으시거나 자신의 이메일을 통해 다운받으실 수 있으며 설치 패키지 또한 메일 주소로 다운로드 경로를 제공합니다.



 다운로드가 설치를 진행하도록 합니다. 첫 화면에서 License에 동의함을 선택하신 후 'Next'버튼을 클릭합니다.



 설치 모드를 선택합니다. 자신이 선호하는 모드를 선택하신 후 'Next'를 클릭합니다.



 TriCore™ Entry Tool Chain를 설치하고자 하는 경로를 설정합니다.



 Product Selection Key를 입력하는 부분입니다. 이 부분에서 라이센스 부여 여부가 결정되는 것으로 보이며 보통은 초기에 Product Selection Key가 미리 설정되어 있어서 그냥 'next'버튼을 누르고 넘어가시면 되겠습니다.



 설치가 진행중입니다. 설치가 완료되면 바탕화면에 'TriCore™ Entry Tool Chain'의 바로가기가 설치되었음을 확인하실 수 있습니다.


※TriCore™ Entry Tool Chain은 Eclipse를 기반으로 만들어진 IDE(통합 개발 환경)이며, Eclipse는 Java가 설치된 환경에서 동작합니다. 만약 자신의 컴퓨터에 JDK가 설치되어 있지 않을 경우 아래의 화면과 같은 오류가 발생합니다. 이 경우 Oracle에서 제공하는 JDK(32-bit)를 설치해 주시기 바랍니다.


http://www.oracle.com/technetwork/java/javase/downloads/index.html



※64-bit 환경의 운영체제를 사용하시는 경우 JDK가 설치되어 있음에도 아래와 같은 오류가 발생하는 경우가 있습니다. 이는 TriCore™ Entry Tool Chain가 32-bit 기반의 프로그램이기 때문에 64-bit 환경의 JDK에서는 실행할 수 없는 겁니다. 이 경우 Oracle에서 제공하는 JDK(32-bit)를 설치해 주시기 바랍니다.


http://www.oracle.com/technetwork/java/javase/downloads/index.html




 설치가 완료된 후 TriCore™ Entry Tool Chain을 실행하면 위와 같은 화면이 나타며 IDE가 실행됩니다.



 TriCore™ Entry Tool Chain를 처음 실행하였을 경우 사용자의 라이센스를 확인하여야 한다는 경고문이 등장합니다. Yes를 눌러줍니다.



 위와 같이 'Add license'이 등장하면 홈페이지에 입력하였던 정보를 그대로 입력해줍니다. 'Finish'버튼을 누르면 인증이 완료되며 Infineon의 AURIX TC23x 시리즈를 개발할 수 있는 환경을 구축하실 수 있습니다.


 설치과정에서 발생하였던 몇몇 이슈들에 대해 알아봅니다.


Q1.설치 후 인증과정에서 라이센스를 발급받았던 신상정보를 그대로 입력했음에도 컴파일러가 작동하지 않습니다.

->TriCore™ Entry Tool Chain의 라이센스를 최종으로 획득하기 위해서는 해당 MAC어드래스를 통해 인터넷이 연결되어 있어야 합니다. 만약 다운로드 당시 LAN의 MAC어드래스로 라이센스를 받아두고 Wi-Fi를 통해 인증을 시도하는 경우 인증이 되지 않는 경우가 발생합니다.


Q2.위의 방법대로 인터넷에 연결된 상태에서 라이센스 인증을 시도하였으나 여전히 컴파일러가 작동하지 않습니다.

->만약 라이센스 인증을 여러 번 시도하였을 경우 최근에 수행하였던 라이센스만 인증이 됩니다. 이 경우 자신의 이메일에 있는 가장 최근에 도착한 license.lic파일을 다운로드 받으신 후 C:/HIGHTEC/licenses 폴더에 삽입합니다. 이 때 기존의 lic파일을 삭제해야 TriCore™ Entry Tool Chain IDE가 단 하나의 라이센스만 인식할 수 있습니다.

  • 공대생 2016.06.29 20:11 ADDR 수정/삭제 답글

    안녕하세요 tc237를 처음 사용하는 학생입니다.
    사용하다가 전원을 연결해주면 ESR0(D106),V_UC(D105) LED가 8~9회 점등되면서 작동을 안하는데 원인을 아시는지 궁금합니다..

Timer를 활용하여 특정 파형간 간격 측정방법

임베디드/MCU 2015.03.25 00:02

 아날로그 회로를 사용할 때 알고 싶은 정보들 중 하나로 특정 파형 간의 간격을 시간으로 구하는 것일겁니다. 그런데 이 파형이 간헐적이라면 사람의 감으로 대략적으로 알 수 있겠습니다만 1MHz 정도 되는 파형으로는 절대 사람의 힘으로는 알 수 없을 것입니다. 이러한 파형을 측정하기 위해 사용되는 것이 바로 MCU에서 사용되는 Timer와 Counter이지요.


 2015년 현재 웨어러블이 주목받고 있습니다. 사람의 몸에 직접 착용하여 사용하는 기기이다 보니 사람의 생체를 활용한 기능들이 속속 선보이고 있습니다. 삼성전자의 갤럭시워치에는 심전도 측정 기능이 등장하였는데요 심박수를 측정할 때도 이 Timer가 쓰이는 것이지요.



  

 2015년 현재의 대표적인 상징물이라 할 수 있는 스마트워치

심전도, 만보계 등 생체를 활용한 기능들이 활용되고 있다.


 이번 포스팅에서는 특정 파형에서 원하는 구간을 측정하여 해당 구간의 시간 간격을 타이머로 구하는 방법에 대해 이야기하려 합니다. 파형으로 심전도 측정값을 활용하여 진행해 보도록 하겠습니다.




 다음과 같이 특정한 파형이 있다고 가정해 봅시다. 우리는 위 파형에서 보이고 있는 Peak 값을 구해볼 것입니다. MCU에서 해당 부분만 검출하기 위해서 아날로그 비교기(Analog Comparator)를 통해 검출해내 보겠습니다.


 여기서 잠시 Analog Comparator의 동작 방식에 대해 간단하게 이해를 하고 넘어가겠습니다.


 Analog Comparator은 기본적으로 2개의 입력과 1개의 출력으로 구성되어 있습니다. 이 때 Vin+을 Input1로, Vin-을 Input2라 가정합니다. 쉽게 설명하자면 Input1과 Input2의 전압차이가 +일 경우 Output의 값은 1이 되며 Input1과 Input2의 전압차이가 -가 될 경우 Output의 값은 0이 됩니다. 아래는 Analog Comparator을 사용한 입출력값과 결과값을 나타냅니다.




 출력결과를 확인하시면 우리들이 흔히 접하는 0과 1의 디지털 파형이 되는 것을 보실 수 있습니다. 이제 이 Output값을 이용해서 우리는 각 1이되는 값 사이의 간격을 측정해 볼 것입니다. 여기서 Output의 파형을 상세하게 보도록 하겠습니다.



 아날로그 파형에서 자신이 측정하고자 하던 파형 사이의 간격은 다음과 같이 측정하면 될 것입니다. 이 때 파형을 측정하는 방법을 다음과 같이 4가지로 보실 수 있습니다.


1. 파형이 1이 될 때

2. 파형이 0이 될 때

3. 파형이 Positive Edge(0에서 1로 올라가는 순간)이 될 때

4. 파형이 Negative Edge(1에서 0으로 내려가는 순간)이 될 때


 Interrupt를 공부하신 분이라면 이 부분에서 '아하!'하고 이해하실 수 있을 것입니다. 그렇습니다. 출력 부분을 Interrupt 처리가 가능한 입력 부분에 연결하실 후 Positive Edge가 발생하는 순간부터 Timer를 동작시켜 시간을 측정하신 후 그 다음 Interrupt가 들어오는 순간 Timer의 동작을 종료시킨 후 해당 값을 확인하시면 파형간 간격을 측정하실 수 있으실 것입니다.

MCU 입력으로 설정한 핀의 값이 일정하지 않을 때(Floating)

임베디드/MCU 2014.07.27 16:40

 MCU를 설계할 때 많은 빈도로 사용되는 기능 중 하나는 아마 GPIO(General Purpose Input Output)일 겁니다. 거의 모든 MCU 설계의 기본이기도 하지요.


 MCU를 처음으로 설계하는 분들 중 MCU의 핀 하나를 입력으로 설정하여 입력을 받는게 받아들이는 값이 지멋대로 튀어 원치않는 값을 받는 경우를 경험하신 분들이 계실거라 생각합니다. 분명 VCC에 걸리면 HIGH 상태가 되고 GND에 연결하면 LOW 상태가 확실히 걸리는데 유독 아무런 값도 걸지 않은 상태에서는 값이 자기 맘대로 튀어 당황하신 분들도 계실거라 생각합니다.


 이와 같은 현상을 플로팅(Floating)이라 하며, 해당 핀의 상태가 HIGH도 아니고 LOW도 아닌 값을 가지고 있는 상황이 되는 것입니다. 즉, 확실한 값을 가지고 있지 않기 때문에 이 상태에서 입력값을 받으면 MCU는 계속해서 이상한 값을 가지게 되는 것입니다.


 이러한 상태를 해결하는 방법으로 풀업(pull-up)과 풀다운(pull-down) 방식이 있습니다.

 pull-up방식은 해당 입력핀의 연결라인 중간에 저항을 연결하고 해당 저항이 HIGH상태(주로 VCC)에 연결되어 있는 상황을 말합니다. 이렇게 회로를 설계하면 해당 입력핀의 값은 HIGH를 유지하다가 전압이 0으로 내려가면 LOW상태가 되며 값이 플로팅 상태 때보다 매우 안정적인 값을 얻으실 수 있습니다. pull-up 방식은 주로 I2C 통신에서 많이 사용되는 회로 입니다.



 위 그림은 I2C회로의 간략한 회로입니다. I2C회로는 각 기기들과 2개의 선으로 연결되어 있는데 해당 2개의 선인 SDA와 SCL은 다른 기기들과 그냥 연결하게 되면 Open Drain 상태가 되여 마스터의 입력이 HIGH가 되어도 Slave는 LOW값을 받아들이는 상태만 지속됩니다. 이러한 두 선에 pull-up 회로를 연결하게 되면 보통때에 HIGH 상태를 유지하던 회로가 MASTER에 의해 LOW 상태가 되면 똑같이 LOW 상태를 보이며 회로가 원하는 디래 동작을 할 수 있게 됩니다.


 pull-down 방식은 위해서 설명한 pull-up 방식과는 반대로 저항의 끝에 GND를 연결하여 LOW 상태를 유지하게 해줍니다. 이 상태에서 HIGH 값이 들어오게 되면 입력핀에서도 HIGH 값을 받을 수 있게 되는 것입니다. 




 위 그림은 pull-down 방식이 적용된 MCU의 상황입니다. 저항과 GND를 연결한 상태로 값이 들어오고 있지 않는 상황에서는 LOW 상태를 유지하다가 VCC나 다른 장치로부터 값이 들어오게 되면 MCU가 HIGH 상태를 인식할 수 있게 되는 것이지요.


 위와 같은 회로를 설계에 참고하신다면 입력값의 Floating 상태를 적절하게 방지하실 수 있을 것으로 보입니다.



좀 더 자세한 내용을 알고 싶으신 분들께 관련 내용이 잘 정리되어 있는 블로그를 알려드리겠습니다.

http://minyoub.tistory.com/5

mcu를 활용한 진동모터 회로 설계

임베디드/MCU 2014.07.25 23:52


 mcu의 출력을 직접 진동모터에 연결해보니 진동모터에 걸리는 전압이 급격히 낮아지면서 진동모터가 전혀 동작을 하지 않는 것을 깨닫고 방법을 생각하던 중 문득 트랜지스터를 사용하는 방법을 깨닫게 되었습니다.

 전자회로에 대한 기본 베이스가 약하신 분들의 경우 직접 설계를 하는 것이 약간은 어려울 것이라 생각합니다. 대략 아래와 같이 설계해본 결과 진동모터가 수월하게 작동하는 것을 확인할 수 있었습니다.





 대략 회로를 설명드리자면 MCU에서 OUTPUT으로 설정한 핀을 트랜지스터의 Base에 연결하고 진동모터를 Collector에 연결한 후 Emitter는 GND로 연결한 상황입니다.

 Output 단자의 출력이 0일 경우 Collector에는 전류가 흐르지 않습니다.

 Output 단자의 출력이 1일 경우 Collector에는 전류가 흐르게 되어 진동모터가 동작을 하게 됩니다.

 약간은 단순한 회로이지만 다른 MCU의 전압으로는 동작이 곤란한 회로에 활용할 수 있을 것입니다.

I2C(TWI) 통신

임베디드/MCU 2014.07.24 16:12

 오랜만에 MCU를 다루게 되면서 처음으로 I2C 통신을 사용하는 부품을 쓰는 일이 생겨 무려 3일동안 I2C에 대해 연구를 해보았습니다. 맨 처음엔 TivaWare에 들어있던 I2C 예제를 복붙해서 그냥 빌드시켜 프로그램을 실행해 보았는데 프로그램 구동 자체가 되지 않는 것을 확인하고는 상당히 시간을 많이 들여 공부해야 되겠다는 생각이 들더군요.

 직접 오실로스코프를 사용하여 화면에 나오는 값들을 일일해 측정하며 I2C 통신의 동작원리를 이해하였고 소스코드도 일일히 하나씩 써 가며 파형이 어떻게 달라지는지를 확인한 결과 드디어 센서가 정상적으로 동작함을 확인할 수 있었습니다.

 이후에 I2C를 공부하게 될 사람들에게 조금이나마 도움을 드리고자 I2C 통신에 처음으로 입문하시는 분들께 큰 힘이 되기를 바랍니다.


 I2C는 Inter Integrated Cricuit의 줄임말로 TWI(Two Wire Interface)라고도 불립니다. I2C 통신의 가장 큰 장점은 바로 단 2가닥의 선으로 여러 대의 기기와 연결하여 통신이 가능하다는 점입니다.



 위 그림에서 보았을 때 I2C 통신은 2종류의 주체로 나눌 수 있습니다. 통신의 중심이 되는 Master와 통신을 하고자 하는 주변 기기를 Slave로 설정할 수 있습니다. 일반적으로 mcu 1대와 여러대의 I2C 통신을 지원하는 기기와 연결할 경우 Master 1대와 Slave 여러대로 통신이 가능합니다. 물론 Master는 2대 이상도 가능하다.


 I2C에서 사용되는 두 선은 SDA와 SCL로 구성되어 있습니다. 통신이 개시되었을 때 SDA는 데이터를 주고 받는 역할을 하고 SCL은 동기화를 위한 CLOCK 역할을 합니다. 여기서 Master와 Slave 각각에 SDA와 SCL을 바로 연결해주기만 하면 되는 것이죠. 그러나 이러한 회로만으로는 오픈 드레인(회로에 + 전압이 걸리지 않는 상황) 상태가 되기 때문에 SDA와 SCL 회로에 풀업 저항(Pull-up resistor)을 달아 전압을 공급해 줘야 합니다. 풀업 저항에 대해 자세히 알고 싶으신 분은 아래 블로그를 참조해 주시길 바랍니다.


풀업(pull-up) 풀다운(pull-down) 저항 1

http://air802.tistory.com/2



 I2C 통신이 이루어지지 않고 있는 상황일 때에는 SDA와 SCL은 High 상태를 유지합니다. Master가 I2C 통신을 개시하게 될 때 SDA가 Low 상태로 내려가게 됩니다. 이 때 SCL은 I2C 통신이 시작되었음을 인지하고 클럭 역할을 하기 시작합니다.

 I2C 통신이 완료되었을 때 Master는 I2C 통신을 종료하게 됩니다. SCL이 HIGH 상태로 돌아왔을 때 SDA가 Low에서 High로 변하게 되면 I2C 통신이 완료됩니다.






 I2C Slave는 각각 자신의 고유 주소를 가지고 있습니다. 주소는 총 7비트로 구성되어 있으며 Master에서 맨 처음 통신하기를 원하는 Slave의 주소를 SDA를 통해 전달하면 해당 주소의 Slave는 Master에게 주소를 수신하였다는 ACK를 Low 상태로 끌어내려 마스터에게 발신합니다. 이후 Master는 Slave에게 데이터를 전송할 수 있게 됩니다. 이 때 데이터는 한 번에 8비트씩 여러번 전송이 가능합니다.




 위에서 Slave address가 모두 전송된 뒤 R/S 부분을 보실 수 있습니다. 이는 해당 Slave의 레지스터를 읽거나 쓸건지의 여부를 물어보는 레지스터로 R의 경우 SDA가 High 상태로 Slave에게 Data를 전달받을 수 있으며 S의 경우 SDA가 Low 상태로 Slave에게 Data를 전송할 수 있습니다.

 


참고자료 : http://mintnlatte.tistory.com/201

  • 손님 2016.03.14 09:38 ADDR 수정/삭제 답글

    정리를 잘 해주셔서 이해하기 쉬웠네요 감사합니다^^

  • ㅇㅇ 2018.11.11 23:21 ADDR 수정/삭제 답글

    잘 이해되었습니다 감사합니다