책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 컴퓨터 공학 > 정보통신공학
· ISBN : 9791197992964
· 쪽수 : 496쪽
· 출판일 : 2023-11-07
책 소개
목차
소개 1
기대 사항 및 사전 요구사항 2
소스 코드 3
서체구성 및 규칙 5
용어에 대한 참고 사항 6
이 책의 구성 7
1부. 저수준 프로토콜과 하드웨어
1장. I2C 저수준 하드웨어 13
1.1 I2C 개요 13
1.2 오픈 드레인(오픈 컬렉터) 로직(논리) 및 4선식 모드 15
1.3 I2C 신호 레벨 17
1.3.1 레벨 쉬프팅(Level Shifting) 17
1.4 풀업 저항 크기 선택 18
1.5 버스 커패시턴스와 풀업 저항값 19
1.5.1 버스 커패시턴스가 너무 높으면 어떻게 할까? 20
1.6 I2C 버스 속도 20
1.7 다중 컨트롤러 I2C 버스 클럭 동기화 21
1.8 다중 컨트롤러 I2C 버스 조정 23
1.9 클럭 스트레칭(Clock Stretching) 24
1.10 누화(cross talk) 25
1.11 요약 26
2장. I2C 프로토콜 27
2.1 I2C 버스의 데이터 27
2.2 I2C 주소 및 읽기/쓰기 제어 31
2.3 반복 시작 상태 32
2.4 클럭 스트레칭(Clock Stretching) 33
2.5 특별 주소 33
2.5.1 일반 호출 주소 34
2.5.2 하드웨어 일반 호출 36
2.5.3 시작 바이트 36
2.5.4 CBUS와 예약된 주소 37
2.5.5 고속 모드 컨트롤러 코드 38
2.5.6 10비트 주변기기 주소 지정 38
2.6 I2C 버스 재설정 40
2.7 버스에서 I2C 주변기기 감지 41
2.8 사용자 지정 장치 만들기 43
2.9 요약 43
3장. I2C 버스의 소프트웨어 구현 45
3.1 Teensy 3.2에서 소프트웨어 I2C 구현 45
3.1.1 Teensy 3.2를 위한 소프트웨어 기반 I2C 컨트롤러 46
3.1.2 Teensy를 위한 소프트웨어 기반 I2C 주변 장치 3.2 72
3.1.3 Teensy 3.2 소프트웨어 I2C 코드에 대한 최종 설명 88
3.2 기본 ATtiny84 및 ATtiny85 하드웨어 88
3.2.1 Atto84 소프트웨어 기반 I2C 주변기기 89
3.3 요약 90
4장. I2C 전송 분석 및 디버깅 도구 93
4.1 일반 하드웨어 테스트와 디버깅 도구 93
4.2 로직 분석기 96
4.3 I2C 드라이버 98
4.4 버스 불법복제장치(이하 The Bus Pirate) 102
4.5 Saleae 논리 분석기 103
4.6 I2C 모니터 및 로직 분석기에 대한 최종 설명 106
4.7 요약 106
5장. I2C 변형 109
5.1 SM버스 109
5.1.1 SMBus와 표준 I2C의 차이점 110
5.1.2 SMBus 전기 사양 111
5.1.3 SMBus 예약 주소 111
5.1.4 SMBus 프로토콜 명령 112
5.2 VESA DDC와 E-DDC 118
5.3 ACCESS.bus 119
5.4 2선 인터페이스 및 2선 직렬 인터페이스 119
5.5 요약 119
2부. 하드웨어 구현 122
6장. 일반 단일 보드 컴퓨터의 I2C 123
6.1 Arduino(아두이노) 제품군 123
6.1.1 Arduino Uno(우노) Rev3와 Leonardo(레오나르도) 125
6.1.2 Arduino Nano(나노) 126
6.1.3 Arduino Micro(마이크로) 127
6.1.4 Arduino Nano Every(에브리) 128
6.1.5 Arduino Mega(메가) 2560 Rev3 129
6.1.6 Arduino Zero(제로) 131
6.1.7 The Arduino Due(듀에) 131
6.1.8 기타 Arduino 브랜드 단일 보드 컴퓨터 132
6.2 Adafruit 단일 보드 컴퓨터 133
6.3 SparkFun 단일 보드 컴퓨터 134
6.4 Teensy(틴지) 시리즈 136
6.5 기타 Arduino 호환 단일 보드 컴퓨터 137
6.6 Raspberry Pi(라즈베리 파이) 137
6.7 Raspberry Pi Pico(피코) 139
6.8 BeagleBone Black(비글본 블랙) 141
6.9 PINE A64 및 ROCKPro64 142
6.10 Onion Omega(어니언 오메가) 143
6.11 STM32 단일 보드 컴퓨터 제품군 144
6.11.1 STM32F767/Nucleo-144 144
6.11.2 STM32F746G-Disco 144
6.11.3 STM32 Boards Galore 145
6.12 NetBurner MOD54415 145
6.13 개인용 컴퓨터의 I2C 145
6.14 요약 146
7장. I2C 공급업체의 버스 149
7.1 Adafruit Feather 버스(Adafruit Feather bus) 150
7.1.1 Feather 버스 출력 핀 152
7.1.2 Feather 버스의 I2C 154
7.1.3 다중 컨트롤러 동작 155
7.1.4 Feathers과 FeatherWings들 155
7.2 SparkFun Qwiic 버스의 I2C 158
7.3 Qwiic 버스 159
7.4 Seeed Studio Grove 버스의 I2C 161
7.5 요약 162
3부. I2C 버스 프로그래밍 165
8장. 아두이노 I2C 프로그래밍 167
8.1 기본 I2C 프로그래밍 168
8.2 기본 Wire 프로그래밍 170
8.2.1 Wire 유틸리티 기능 170
8.2.2 Wire 읽기 작업 171
8.2.3 Wire 쓰기 작업 172
8.2.4 Wire 주변 장치 함수 173
8.3 아두이노 I2C 쓰기 174
8.4 아두이노 I2C 읽기 예제 178
8.5 아두이노 I2C 주변기기 예제 180
8.6 다중 I2C 포트 프로그래밍 184
8.7 장 요약 184
9장. 라즈베리 파이와 리눅스에서 I2C 프로그래밍 187
9.1 Pi 범용 입력/출력 헤더의 I2C 버스 핀 188
9.2 I2C 버스 수동 활성화 191
9.3 I2C 클럭 주파수 변경 193
9.4 I2C 클럭 스트레칭 문제 및 해결 방법 194
9.5 라즈베리 파이 OS(리눅스) I2C 유틸리티들 196
9.6 I2C 데이터 읽기 및 쓰기 201
9.7 고급 I2C 커널 호출 206
9.7.1 i2c-dev 함수들 208
9.7.2 i2c_smbus_write_quick 함수 209
9.7.3 i2c_smbus_read_byte 함수 210
9.7.4 i2c_smbus_write_byte() 함수 211
9.7.5 i2c_smbus_read_byte_data() 함수 212
9.7.6 i2c_smbus_write_byte_data() 함수 214
9.7.7 i2c_smbus_read_word_data() 함수 214
9.7.8 i2c_smbus_write_word_data() 함수 215
9.7.9 i2c_smbus_read_block_data() 함수 216
9.7.10 i2c_smbus_write_block_data() 함수 217
9.7.11 기타 기능 218
9.8 I2C 작업의 재진입 문제 218
9.9 리눅스에서 다중 컨트롤러 동작 219
9.10 기타 리눅스 시스템 219
9.10.1 PINEA64 및 ROCKPro64 219
9.10.2 비글본 블랙(BeagleBone Black) 219
9.10.3 어니언 오메가2+(Onion Omega2+) 220
9.11 라즈베리 파이를 I2C 주변 장치로 사용 220
9.12 요약 221
10장. 실시간 운영체제의 I2C 프로그래밍 223
10.1 실시간 운영체제 기본 사항 224
10.1.1 프로세스와 스레드 225
10.1.2 멀티스레딩과 멀티태스킹 226
10.1.3 재진입 227
10.1.4 동기화 228
10.1.5 안전 임계 시스템 228
10.2 실시간 운영체제 I2C 프로그래밍 229
10.2.1 μC/OS 229
10.2.2 FreeRTOS I2C 프로그래밍 242
10.2.3 Teensy Threads I2C 프로그래밍 248
10.2.4 Mbed I2C 프로그래밍 255
10.3 기타 실시간 운영체제 I2C 프로그래밍 260
10.4 요약 261
11장. 베어메탈(BARE-METAL) I2C 컨트롤러 프로그래밍 263
11.1 Teensy 4.x 컨트롤러 프로그래밍 264
11.1.1 i.MX RT1062 I2C 레지스터 265
11.1.2 Teensy 4.x Wire 코드 273
11.2 ATtiny 컨트롤러 프로그래밍 298
11.2.1 Atto84 삼각파 데모 프로그램 301
11.3 요약 318
4부. I2C 주변기기 프로그래밍 예제 320
12장. TCA9548A I2C 버스 확장기 321
12.1 TCA9548A I2C 멀티플렉서 322
12.1.1 업스트림 및 다운스트림 장치 322
12.1.2 TCA9548A 선택 레지스터 323
12.1.3 TCA9548A 주소 및 리셋 라인 323
12.1.4 TCA9548A 전원 공급 장치, 풀업 및 레벨 시프터(shift) 324
12.1.5 버스 부하 및 버스 속도 줄이기 324
12.1.6 버스 간 전환 325
12.1.7 단계적 TCA9548A 멀티플렉서 325
12.2 Adafruit TCA9548A I2C 확장기 327
12.3 SparkFun I2C Mux 328
12.4 요약 329
13장. MCP23017 및 MCP23008 GPIO 확장기 331
13.1 MCP23017 및 MCP23008 핀 출력 332
13.2 MCP230xx 레지스터 334
13.2.1 MCP230xx 레지스터 접근 336
13.2.2 MCP230xx 초기화 337
13.2.3 데이터 방향 프로그래밍 340
13.2.4 프로그래밍 입력 풀업 저항기 340
13.2.5 입력 극성 프로그래밍 342
13.2.6 순차 레지스터 연산 343
13.2.7 슬루율 제어 345
13.2.8 MCP230xx에서 범용 입력/출력 핀 읽기 346
13.3 MCP230xx에 범용 입력/출력 핀 쓰기 347
13.4 MCP23017의 입력/출력 시연 349
13.5 MCP230xx의 인터럽트 354
13.5.1 MCP230xx에 대한 인터럽트 작업 354
13.5.2 인터럽트 서비스 루틴 355
13.5.3 INTx 핀 미러링(MCP23017만 해당) 357
13.5.4 오픈 드레인 INTx 출력 358
13.5.5 MCP230xx에서 인터럽트 활성화 359
13.5.6 인터럽트 테스트 및 지우기 360
13.6 샘플 인터럽트 구동 MCP230xx 361
13.7 MCP230xx 라이브러리 코드 372
13.8 I2C 성능 373
13.9 MCP23Sxx 부품 373
13.10 요약 373
14장. I2C 주변기기 프로그래밍 예제 375
14.1 아날로그-디지털 변환기 사양 376
14.1.1 아날로그-디지털 변환기 해상도 377
14.1.2 아날로그-디지털 변환기 채널 377
14.1.3 아날로그-디지털 변환기 378
14.1.4 아날로그-디지털 변환기 범위 378
14.1.5 차동 대 단일 종단 모드 379
14.1.6 샘플 빈도 381
14.1.7 기타 ADS1x15 기능 382
14.2 아날로그 조절 382
14.3 ADS1x15 아날로그-디지털 변환기 레지스터 387
14.3.1 변환 레지스터 388
14.3.2 환경설정 레지스터 388
14.3.3 하한 및 상한 임곗값 레지스터 394
14.4 Adafruit ADS1x15 브레이크아웃 보드 395
14.5 ADS1x15 프로그래밍 예제 398
14.6 폴링 성능 개선 405
14.7 연속 스캔을 사용한 성능 향상 410
14.8 인터럽트와 ADS1x15 414
14.9 노이즈 필터링 415
14.9.1 계산 방법 및 중앙값 416
14.10 요약 424
15장. MCP4725 디지털-아날로그 변환기 427
15.1 MCP4275 개요 428
15.2 빠른 쓰기 명령 430
15.3 쓰기 명령 431
15.4 전원 차단 모드 432
15.5 읽기 명령 433
15.6 요약 435
16장. 베어메탈(BARE-METAL) 주변기기 프로그래밍 437
16.1 I2C 주변 장치로서의 ATtiny 437
16.2 메모리 주변 장치 소개 439
16.3 메모리 주변 소프트웨어 구조 441
16.3.1 핵심 파일 442
16.3.2 인터럽트 서비스 루틴 라이브러리 449
16.3.3 샘플 컨트롤러 애플리케이션 476
16.4 요약 479
에필로그 480
부록 A 480
ADAFRUIT I2C 주소 컴파일 481
부록 B 481
온라인 챕터 488
부록 C 488
주요용어 490
찾아보기 492
책속에서
I 부: 저수준 프로토콜 및 하드웨어
I2C에 대한 신호 및 하드웨어에 관해 설명한다. I2C 버스를 사용하여 시스템을 설계하거나 주변기기를 프로그래밍하고 코드를 작성하기 위해 이 정보를 반드시 알아야 하는 것은 아니지만 이 지식은 I2C 버스를 사용하는 하드웨어 및 소프트웨어를 디버깅할 때 편리하다. 그리고 I부에는 전기 사양보다 코드에 더 많은 관련이 있는 소프트웨어 엔지니어를 위한 I2C 버스의 소프트웨어 구현과 I2C 버스 트랜잭션 분석 및 디버깅에 대한 부분도 포함되어 있다. 마지막으로 I2C 버스에 대한 다양한 실제 확장에 대해 논의하는 것으로 이 부분을 마무리한다.
II 부: 하드웨어 구현
I2C 버스의 여러 실제 구현에 관해 설명하고 아래 목록에 나오는 하드웨어의 I2C 구현을 검토한다.
• Arduino 시스템(및 호환 가능)
• Teensy 3.x 및 4.x SBC I2C 구현
• Raspberry Pi, BeagleBone Black, PINE64 및 ROCKPro64, Onion 및 기타 Linux 시스템
• STM32/Nucleo-144/Nucleo-64 I2C 구현
• NetBurner MOD54415 I2C 구현
II 부에서는 다음과 같은 I2C 버스 구현도 설명한다.
• Adafruit Feather 버스
• SparkFun Qwiic 버스
• Seeed Studio Grove 버스
III 부: I2C 버스 프로그래밍
I2C 버스의 프로그래밍 장치에 관해 설명한다. 그리고 실시간 OS I2C 프로그래밍과 같은 다양한 일반 프로그래밍 기술을 다루고 Arduino, Raspberry Pi, Teensy, MBED 및 NetBurner에 대한 구체적인 실제 프로그래밍 예제를 제공한다. 또한 라이브러리 코드를 호출하는 대신 하드웨어 수준에서 작동하는 베어메탈 프로그래밍 기술을 사용하여 I2C를 구현하는 방법을 설명한다.
IV 부: I2C 주변기기 프로그래밍 예제
MCP23017 GPIO 확장기, ADS111516비트 A/D 변환기, MCP4725 D/A 변환기 및 TCA9548A I2C 멀티플렉서를 비롯한 일부 일반적인 실제 I2C 주변 장치 IC에 대한 프로그래밍 예제를 제공한다. IV부에서는 SparkFun Atto84 모듈을 맞춤형 I2C 주변기기로 사용하는 방법도 설명한다.
부록
부록 A는 Adafruit I2C 주소를 편집한 목록이며, 수백 개의 상용 I2C 주변 장치 IC의 주소이다.
부록 B에는 온라인 콘텐츠에 대한 개요가 포함되어 있다. 그런데 사용할 수 있는 I2C 컨트롤러와 주변 장치가 너무 많고, 이 책이 출간된 후에 새로운 주변기기가 더 만들어지므로 더 이상 페이지를 추가하는 것은 의미가 없다. 따라서 이 문제를 해결하고 이 책에 대해 지불해야 하는 가격을 줄이기 위해 httpss://bookofi2c.randallhyde.com에서 온라인으로 사용할 수 있다.