Linux: I2C Broadcom ๋ฒ„๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•.

์— ๋งŒ๋“  2013๋…„ 03์›” 20์ผ  ยท  73์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: raspberrypi/linux

broadcom BCM2835๋Š” I2C ๋ชจ๋“ˆ์— (ํ•˜๋“œ์›จ์–ด) ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

BCM์€ "ํด๋ก ์ŠคํŠธ๋ ˆ์นญ"์„ ๋‚˜์œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿญ์— ๋Œ€ํ•œ ์ตœ์†Œ "ํ•˜์ด ํƒ€์ž„"์„ ๋ณด์žฅํ•˜๋Š” ๋Œ€์‹  BCM์€ I2C ํด๋Ÿญ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋กํ•˜๊ณ  ํด๋Ÿญ์„ ๋‹ค์‹œ ๋’ค์ง‘์„ ๋•Œ ํด๋Ÿญ์ด ๋†’์•„ ์กŒ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‚ฎ ์œผ๋ฉด ํด๋Ÿญ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. "์‹œ๊ณ„ ์ŠคํŠธ๋ ˆ์นญ"์„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์ ๊ฒ€ ์ „ ๋ช‡ ๋‚˜๋…ธ์ดˆ ์•ˆ์— ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ ํ•ด์ œํ•˜์—ฌ ์ƒˆ ํด๋Ÿญ์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€๋˜์—ˆ์Œ์„ ์•Œ๋ฆฌ๋ฉด ํด๋Ÿญ ํŽ„์Šค๊ฐ€ 40ns๋งŒํผ ์งง์•„ ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ์ œ๊ฐ€ ์ธก์ • ํ•  ์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆ˜์น˜์ด๋ฉฐ ๋ฌผ๋ก  ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค). 100kHz (10 ๋งˆ์ดํฌ๋กœ ์ดˆ) I2C ํด๋Ÿญ์—์„œ ํด๋Ÿญ์„ ํ•ด์ œํ•˜๋Š” "๋‚˜์œ"์ˆœ๊ฐ„์€ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ ๊ฐ„๊ฒฉ์ž…๋‹ˆ๋‹ค.

๋‚ด ์Šฌ๋ ˆ์ด๋ธŒ์—๋Š” ์ตœ์†Œ 500ns์˜ ํด๋Ÿญ ํŽ„์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (100kHz ์ž‘๋™์„ ์œ„ํ•ด ๊ตฌ์„ฑ๋˜์—ˆ์„ ๋•Œ ๋งˆ์Šคํ„ฐ๊ฐ€ ์ƒ์„ฑํ•ด์•ผํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 10 ๋ฐฐ ๋” ์งง์•„์•ผํ•ฉ๋‹ˆ๋‹ค).

๊ทธ๊ฒƒ์€ ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ํ•  ์ˆ˜์—†๋Š” ํ•˜๋“œ์›จ์–ด ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. (ํ•˜๋“œ์›จ์–ด ์ „๋ฌธ๊ฐ€๋ฅผ์œ„ํ•œ ํŒ : ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํด๋Ÿญ ํ™•์žฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€์‹  : ํด๋Ÿญ์ด ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๋Š” ๋™์•ˆ CLOCKDIV ์นด์šดํ„ฐ์˜ ๊ณ„์ˆ˜๋ฅผ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋ชจ๋“  ์‚ฌ์ดํด์—์„œ ๋ช‡ ๊ฐœ์˜ ๋น ๋ฅธ ํด๋Ÿญ์„ ํด๋Ÿญ ํ™•์žฅ ํ•  ๊ฒƒ์ด์ง€๋งŒ ํ‘œ์ค€ ์ค€์ˆ˜๋Š” ์ƒ๋‹นํžˆ ํ–ฅ์ƒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ).

์ด ๊ฒฝ์šฐ BCM์€ ๋งค์šฐ ์งง์€ ์ฒซ ๋ฒˆ์งธ ํด๋ก ํŽ„์Šค๋กœ ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์ฒซ ๋ฒˆ์งธ ํด๋Ÿญ ํŽ„์Šค๋ฅผ ๋ณด์ง€ ๋ชปํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ฐ”์ดํŠธ์˜ ๋์—์„œ ํ•ด๋‹น ๋ฐ”์ดํŠธ๋ฅผ ACK ํ•  ๋•Œ๊ฐ€๋˜๋ฉด ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์—ฌ์ „ํžˆ 8 ๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. BCM์€ ์ด๊ฒƒ์„ "NAK"๋กœ ํ•ด์„ํ•˜๊ณ  I2C ์ „์†ก์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์‹œ์ ์—์„œ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” 8 ๋ฒˆ์งธ ํด๋Ÿญ ํŽ„์Šค๋ฅผ๋ณด๊ณ  "ACK"๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค (SDA ๋ผ์ธ์„ ๋กœ์šฐ๋กœ ๋Œ์–ด ์˜ด). ์ด๋Š” BCM์ด ๋‹ค์Œ ์ „์†ก์„ ์œ„ํ•ด ์ ์ ˆํ•œ "START"์กฐ๊ฑด์„ ๋ฐœํ–‰ ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•˜๋“œ์›จ์–ด ๋ฒ„๊ทธ์˜ ์˜ํ–ฅ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ œ์•ˆ ๋œ ์†Œํ”„ํŠธ์›จ์–ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ๋ฐ”์ดํŠธ์˜ "NAK"๋กœ ์ธํ•ด ์ „์†ก์ด ์ค‘๋‹จ ๋œ ๊ฒฝ์šฐ STOP ์ „์— ๋‹จ์ผ ์ถ”๊ฐ€ ํด๋ก์ฃผ๊ธฐ๋ฅผ ๋ฐœํ–‰ํ•˜์—ฌ ์Šฌ๋ ˆ์ด๋ธŒ๋ฅผ ๋™๊ธฐํ™”ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋ฐ”์ดํŠธ๋ฅผ ACKํ•˜์ง€ ์•Š์„ ๋•Œ "์˜ค๋ฅ˜ ๊ฒฝ๋กœ"์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ „์†ก์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ์—์„œ๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ „์†ก์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜์ •์€ ๋“œ๋ผ์ด๋ฒ„์— ์†ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ. ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ํ•˜๋“œ์›จ์–ด ์šฉ ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ตœ์„ ์„ ๋‹คํ•ด ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์€ ๋“œ๋ผ์ด๋ฒ„์˜ ์˜๋ฌด์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” hmf2015,
์ด๊ฒƒ์€ ํฌ๋Ÿผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„๊ทธ ์ถ”์ ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด ์ฃผ์„ ๋ชฉ๋ก์€ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด์—†๋Š” ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํฌ๋Ÿผ์ด๋‚˜ ํ—ฌํ”„ ๋ฐ์Šคํฌ์— ๋ฌธ์ œ๋ฅผ ๋…ผ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. "์•„๋งˆ๋„ ๋™์ผํ• ๊นŒ์š”? ๋‚ด ์„ค๋ช…์ด ํ•ด๋‹น ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ ๊นŒ์š”?" ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด๋ณด๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด๊ด€ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.์ด ํ† ๋ก ์„ ๋” ์ด์ƒ "์˜ค์—ผ"์‹œํ‚ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋ชจ๋“  73 ๋Œ“๊ธ€

๋“œ๋ผ์ด๋ฒ„์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ํฌํ•จ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ ์ ˆํ•œ ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ, ์•„์ง.

1) ์•„์ง I2C ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•ฝ 1 ๋…„ ์ „, ์ œ๊ฐ€ ์ง์ ‘ ์“ธ ๊ณ„ํš์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ทธ ์ผ์„ํ•˜๊ธฐ ์ „์— ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์ผ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ด๋ฏธ ์•Œ๊ณ ์žˆ๋Š” ์‚ฌ๋žŒ์€์ด ์ž‘์—…์„ 5 ๋ถ„์งœ๋ฆฌ ํ”„๋กœ์ ํŠธ๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ๋” ๋‚˜์€ ์žฅ๋น„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์ „์ž๋ฅผ ์•Œ์•„๊ฐ€๋Š” ๋ฐ๋Š” ์ตœ์†Œํ•œ ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
2) ๊ท€ํ•˜ (๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ)๊ฐ€ ์ˆ˜์ • / ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ณด์žฅ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
3) ์ €๋Š” ์ด๊ฒƒ์„ "ํ•ด์•ผ ํ•  ์ผ"๋กœ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์žŠ์ง€ ๋ง์•„์•ผํ•ฉ๋‹ˆ๋‹ค ....
4) ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•˜๊ธฐ : ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ƒˆ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•  ๋•Œ SDA ๋ผ์ธ์ด ์—ฌ์ „ํžˆ ๋‚ฎ์€ ๊ฒฝ์šฐ์—๋„ ํŠธ๋ฆฌ๊ฑฐ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ "๋ฌธ์ œ"์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

"์ž˜๋ชป๋จ"์‚ฌ๋ก€๋Š” "์ •์ƒ์ ์ธ"์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด I2C- ๋ฒ„์Šค์— ํ•˜๋“œ์›จ์–ด i2c ๋ชจ๋“ˆ์„ ๊ฐ€์ง€๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. I2C๊ฐ€ ๋ฐœ๋ช…๋˜์—ˆ์„ ๋•Œ "10us"๋Š” ์ผ๋ถ€ ์นฉ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” "๋งค์šฐ ์งง์€"์‹œ๊ฐ„์ด์—ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํด๋Ÿญ ํ™•์žฅ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ๋ชจ๋“  ํ•˜๋“œ์›จ์–ด I2C ๊ตฌํ˜„์€ "๋น ๋ฅธ I2C"๋ฅผ ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ atmel ์‚ฌ๋žŒ๋“ค์ด ๋น„๋™๊ธฐ ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ์™ธ๋ถ€์—์„œ ์ œ๊ณต๋˜๋Š” ํด๋Ÿญ (i2c- ์Šฌ๋ ˆ์ด๋ธŒ ๋˜๋Š” SPI- ์Šฌ๋ ˆ์ด๋ธŒ)์—์„œ ์‹คํ–‰๋˜๋Š” ๋Œ€์‹  ๋ชจ๋“ˆ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ”„๋กœ์„ธ์„œ ํด๋Ÿญ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์‹ ํ˜ธ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ filpflops๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ํ•˜๋“œ์›จ์–ด ๋””์ž์ธ. ๋Œ€์•ˆ์€ IMHO๊ฐ€ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํด๋Ÿญ์—์„œ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ (cpu-) ํด๋Ÿญ ๋„๋ฉ”์ธ์œผ๋กœ ์ „๋‹ฌ ๋  ๋•Œ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CPU๊ฐ€ 8์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋„ SPI ๋ชจ๋“ˆ์ด 20MHz์—์„œ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“ . ์ถฉ๋ถ„ํ•œ ํ•˜๋“œ์›จ์–ด ํ”๋“ค๋ฆผ.

์ œ์•ˆ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘์‹œ SDA ๋ผ์ธ์ด ์—ฌ์ „ํžˆ ๋‚ฎ์„ ๋•Œ ์ถ”๊ฐ€ ํด๋ก์ฃผ๊ธฐ๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ( "์‹œ์ž‘"์กฐ๊ฑด์„ ๋ฐœํ–‰ ํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ๋†’๊ฒŒ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค).

์ฒซ์งธ, I2C์— ๋Œ€ํ•ด ๊ฑฐ์˜ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Gert์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

I2C์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹น์‹ ์ด ์„ค๋ช…ํ•œ ์‹œ๊ณ„ ์ŠคํŠธ๋ ˆ์นญ ๋ฌธ์ œ
  2. ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ I2C ์ƒํƒœ ์‹œ์Šคํ…œ ๋ฌธ์ œ

1์˜ ๊ฒฝ์šฐ Gert์˜ ๊ฒฌํ•ด๋Š” ํ™•์‹คํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
I2C ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
I2C ํด๋Ÿญ์ด ์ œํ•œ๋œ ์–‘๋งŒํผ ๋Š˜์–ด ๋‚˜๋ฉด I2C ํด๋Ÿญ ์ฃผํŒŒ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๋ฉด ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ „ ์‚ฌ๋ก€์—์„œ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ์Šฌ๋ ˆ์ด๋ธŒ ์šฉ ๋น„ํŠธ ์พ… ๋“œ๋ผ์ด๋ฒ„๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์ œ์•ˆ์ด ํšจ๊ณผ๊ฐ€ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ค„์ด๊ฑฐ ๋‚˜ ์™„์ „ํžˆ ๊ณ ์น˜๋Š” ์ง€ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Gert๋Š” ๊ทธ๊ฐ€ ์‹œ๋„ํ•˜๊ณ  ๊ณต๊ฐœ ํ•  ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์žˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

2์˜ ๊ฒฝ์šฐ GPU I2C ๋“œ๋ผ์ด๋ฒ„์— ์ƒํƒœ ์‹œ์Šคํ…œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

/***********************************************************
 * Name: i2c_actual_read
 *
 * Arguments:
 *       const I2C_PERIPH_SETUP_T *periph_setup,
         const uint32_t sub_address,
         const uint32_t data_to_read_in_bytes,
         void *data
 *
 * Description: Routine to actually transfer data to the I2C peripheral
 *
 * Returns: int == 0 is success, all other values are failures
 *
 ***********************************************************/
static int32_t i2c_actual_read(  const I2C_PERIPH_SETUP_T *periph_setup,
                                 const I2C_USER_T *user,
                                 const uint32_t sub_address,
                                 const uint32_t read_nbytes,
                                 void *data,
                                 const int using_interrupt)
{
   int32_t rc = -1; /* Fail by default */
   int32_t status = 0;
   int32_t nbytes;

   uint32_t sub;
   uint8_t* read_data = (uint8_t*)data;
   uint32_t data_read = 0;

   if( NULL != periph_setup && NULL != data ) {

      // confirm that the latch is held for this transaction
      assert( i2c_state.periph_latch[ periph_setup->port ] != rtos_latch_unlocked() );

      // -> START
      // -> Slave device address | WRITE
      // <- Ack
      // -> Sub address
      // <- Ack
      // -> Sub address
      // <- Ack
      // -> ReSTART
      // -> Slave device address | READ
      // <- Ack
      // <- Data[0]
      // -> Ack
      // <- Data[1]
      // -> nAck
      // -> STOP

      I2CC_x( periph_setup->port )     = I2CC_EN | I2CC_CLEAR; /* Enable I2C and clear FIFO */
      I2CS_x( periph_setup->port )     = I2CS_ERR | I2CS_DONE | I2CS_CLKT; /* clear ERROR and DONE bits */
      I2CA_x( periph_setup->port )     = periph_setup->device_address;

      sub = sub_address;
      nbytes = periph_setup->sub_address_size_in_bytes;

      if( 0 == nbytes ) {
         /* No subaddress to send - just issue the read */
      } else {
         /*
           See i2c.v: The I2C peripheral samples the values for rw_bit and xfer_count in the IDLE state if start is set.

           We want to generate a ReSTART not a STOP at the end of the TX phase. In order to do that we must
           ensure the state machine goes RACK1 -> RACK2 -> SRSTRT1 (not RACK1 -> RACK2 -> SSTOP1). 

           So, in the RACK2 state when (TX) xfer_count==0 we must therefore have already set, ready to be sampled:
           READ ; rw_bit     <= I2CC bit 0   -- must be "read"
           ST;    start      <= I2CC bit 7   -- must be "Go" in order to not issue STOP
           DLEN;  xfer_count <= I2CDLEN      -- must be equal to our read amount

           The plan to do this is:
           1. Start the sub-add]ress write, but don't let it finish (keep xfer_count > 0)
           2. Populate READ, DLEN and ST in preparation for ReSTART read sequence
           3. Let TX finish (write the rest of the data)
           4. Read back data as it arrives

         */
         assert( nbytes <= 16 );
         I2CDLEN_x( periph_setup->port )  = nbytes;
         I2CC_x( periph_setup->port )    |= I2CC_EN | I2CC_START; /* Begin, latch the WRITE and TX xfer_count values */

         /* Wait for us to leave the idle state */
         while( 0 == ( I2CS_x(periph_setup->port) & (I2CS_TA|I2CS_ERR) ) ) {
            _nop();
         }
      }

      /* Now we can set up the parameters for the read - they don't get considered until the TX xfer_count==0 */
      I2CDLEN_x( periph_setup->port )  = read_nbytes;
      I2CC_x( periph_setup->port )     |= I2CC_EN | I2CC_START | I2CC_READ;

      /* Let the TX complete by providing the sub-address */
      while( nbytes-- ) {
         I2CFIFO_x( periph_setup->port ) = sub & 0xFF; /* No need to check FIFO fullness as sub-address <= 16 bytes long */
         sub >>= 8;
      }

      /* We now care that the transmit portion has completed; the FIFO is shared and we mustn't read out
         any of the data we were planning on writing to the slave! */

      /* Wait for peripheral to get to IDLE or one of the two RX states - this way we *know* TX has completed or hit an error */
      {
         uint32_t state;
         bool_t state_transition_complete;
         bool_t error_detected;
         do { 
            state = (I2CS_x( periph_setup->port ) & 0xf0000000) >> 28;
            state_transition_complete = ((state == 0) || (state == 4) || (state == 5));
            error_detected = (I2CS_x(periph_setup->port) & (I2CS_ERR | I2CS_CLKT)) != 0;
         } while(!state_transition_complete && !error_detected);

         if (error_detected) {
            /* Clean up, and disable I2C */
            I2CC_x( periph_setup->port ) &= ~(I2CC_INTD | I2CC_INTR);
            I2CC_x( periph_setup->port ) &= ~(I2CC_START | I2CC_READ);
            I2CS_x( periph_setup->port ) = I2CS_CLKT | I2CS_ERR | I2CS_DONE;
            I2CC_x( periph_setup->port ) |= I2CC_CLEAR;
            I2CC_x( periph_setup->port ) = 0;
            return -1;
         }
      }

      if (using_interrupt)
      {
         /* Wait for interrupt to complete. */
         i2c_state.active_buffer[periph_setup->port] = data;
         i2c_state.active_buffer_length[periph_setup->port] = read_nbytes;
         i2c_state.active_buffer_offset[periph_setup->port] = 0;
         i2c_state.pending_transfer[periph_setup->port] = I2C_PENDING_TRANSFER_READ;
         RTOS_LATCH_T latch = rtos_latch_locked();
         i2c_state.pending_latch[periph_setup->port] = &latch;

         /* Enable interrupt. */
         I2CC_x( periph_setup->port ) |= I2CC_INTD | I2CC_INTR;

         rtos_latch_get (&latch);

         i2c_state.pending_latch[periph_setup->port] = NULL;
         data_read = i2c_state.active_buffer_offset[periph_setup->port];

         rc = (data_read == read_nbytes) ? 0 : -1;
      }
      else
      {
         uint32_t time_now = 0;

         /* Loop until we've read all our data or failed. */
         while( 0 == ( I2CS_x(periph_setup->port) & (I2CS_TA|I2CS_ERR|I2CS_DONE) ) ) {
            _nop();
         }

         /* Wait for some data to arrive - we should wait, at most, I2C_TIMEOUT_IN_USECS for data to arrive every time we start waiting */
         time_now = i2c_state.systimer_driver->get_time_in_usecs( i2c_state.systimer_handle );
         while( ((i2c_state.systimer_driver->get_time_in_usecs( i2c_state.systimer_handle ) - time_now) < I2C_TIMEOUT_IN_USECS)
                && ( data_read < read_nbytes )
                && !(I2CS_x( periph_setup->port ) & I2CS_ERR) ) 
         {
            if (I2CS_x( periph_setup->port ) & I2CS_RXD) 
            {
               read_data[ data_read ] = I2CFIFO_x( periph_setup->port );
               data_read++;
               time_now = i2c_state.systimer_driver->get_time_in_usecs( i2c_state.systimer_handle  );
            }
         }

         if( (data_read != read_nbytes) /* Did we read all the data we asked for? */
             || ( (read_nbytes - data_read) != I2CDLEN_x( periph_setup->port ) ) /* Has DLEN decremented? */
             || ( 0 != (I2CS_x( periph_setup->port ) & I2CS_ERR) ) ) { /* Are there any errors? */
            rc = -1;
         } else {
            while( I2CS_DONE != (I2CS_x(periph_setup->port) & I2CS_DONE) ); /* Wait for the peripheral */
            rc = 0;
         }
      }

      /* Clean up, and disable I2C */
      I2CC_x( periph_setup->port ) &= ~(I2CC_INTD | I2CC_INTR);
      if(I2CS_x( periph_setup->port ) & I2CS_ERR) {
         //Wait for it to be idle
         while(I2CS_x( periph_setup->port ) & I2CS_TA)
            _nop();
      }
      I2CS_x( periph_setup->port ) = I2CS_ERR | I2CS_DONE;
      //Finally disable the I2C
      I2CC_x( periph_setup->port ) = 0x0;
   }

   if( !user->skip_asserts ) {
      assert( rc >= 0 );
      _nop();
   }

   return rc;
}      

์‚ฌ๋žŒ๋“ค์ด์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋ถ™์—ฌ ๋„ฃ์€ ๊ฒƒ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•˜๋“œ์›จ์–ด ๋ฒ„๊ทธ๋ฅผ ์™„์ „ํžˆ ๊ทผ์ ˆํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋งˆ์Šคํ„ฐ์™€ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ํด๋ก ์‚ฌ์ดํด ์ˆ˜์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šฌ๋ ˆ์ด๋ธŒ์— ์˜ํ•ด ํ•ด์„๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์˜๋„ ํ•œ ๋งˆ์Šคํ„ฐ (= ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด = ๋“œ๋ผ์ด๋ฒ„ / ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ ์–ด๋”˜๊ฐ€์— ์™„์ „ํžˆ ๊ฐ€์งœ ๊ฐ’์„ ์“ฐ๊ณ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ตœ์†Œํ•œ ๋‹ค์Œ ํŠธ๋žœ์žญ์…˜์ด ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์˜ํ–ฅ์€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

I2C ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

I2C ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ....

I2C ํด๋Ÿญ์ด ์ œํ•œ๋œ ์–‘๋งŒํผ ๋Š˜์–ด ๋‚˜๋ฉด I2C ํด๋Ÿญ ์ฃผํŒŒ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๋ฉด ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ. ํ•œ ์œ„์น˜์— "ํ˜„์žฅ์—"10 ๊ฐœ์˜ ์žฅ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์„ธ ๋ชจ๋“ˆ์˜ ํด๋Ÿญ ์ฃผํŒŒ์ˆ˜ (RC ํด๋Ÿญ)๋Š” ์ •ํ™•ํžˆ ์ž˜๋ชป๋œ ์ˆœ๊ฐ„์— ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜ "์™„๋ฃŒ"๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํด๋Ÿญ ์ฃผํŒŒ์ˆ˜๋ฅผ ์ค„์ด๋ฉด ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ ์ง€์—ฐ์ด ๊ณ ์ •๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด 5 ๋งˆ์ดํฌ๋กœ ์ดˆ ์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜์žˆ๋Š” ํ†ต๊ณ„์  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋งŽ๊ฑฐ๋‚˜ ์ ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ์Šฌ๋ ˆ์ด๋ธŒ์— 0.25 ๋งˆ์ดํฌ๋กœ ์ดˆ์˜ ํด๋ก ํญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ก ์ŠคํŠธ๋ ˆ์นญ์€ BCM์˜ ํด๋ก ๋ณ€๊ฒฝ ์ˆœ๊ฐ„๊นŒ์ง€ ์ด์–ด์ง€๋Š” 5 %์˜ ์‹œ๊ฐ„์— ๋๋‚˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ๊ฒฝ์šฐ 20 ๊ฑด์˜ ์ „์†ก ์ค‘ ์•ฝ 1 ๊ฑด์ด ์ž˜๋ชป ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์‚ฌ์–‘์€ ํด๋Ÿญ ํŽ„์Šค์— ๋Œ€ํ•ด ์ตœ์†Œ 250ns๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์ด ๋” ์งง์œผ๋ฉด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด> 250ns์—์„œ 100 %์—์„œ < 125ns.)

์ €๋Š” ์–ด์ œ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ์˜ ๊ธฐํšŒ ์ฐฝ์—์„œ 2.5 ๋งˆ์ดํฌ๋กœ ์ดˆ ์ •๋„์˜ ์‹œ๊ฐ„์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ ๊ธฐ๊ฐ„์„ ๋Š˜ ๋ ธ์Šต๋‹ˆ๋‹ค. ์ฐฝ ์‹œ์ž‘์„ ๋ชฉํ‘œ๋กœํ•˜๊ณ  RC ์‹œ๊ณ„๊ฐ€ ์•ฝ๊ฐ„ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋ฉด "0"์„ ๋ˆŒ๋Ÿฌ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. 5๋ฅผ ๋ชฉํ‘œ๋กœํ•˜๋ฉด ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ ๋‚˜์œ ๊ณณ์—์„œ ๋ฉ€์–ด์ง€๋ฉด์„œ ์ค‘๊ฐ„์„ ๋…ธ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ I2C ํด๋Ÿญ์„ 80kHz๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  BAM์€ ๋ฏผ๊ฐํ•œ ์ง€์ ์„ ๋ชฉํ‘œ๋กœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ... (80kHz์—์„œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด 80์—์„œ 100 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค).

๋‹ค์Œ์€ I2C ๋ฒ„๊ทธ์— ๋Œ€ํ•œ Gert์˜ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.
https://dl.dropbox.com/u/3669512/2835_I2C%20interface.pdf

ใ…‹! ํ…Œ์ŠคํŠธ ๋ณด๋“œ๋ฅผ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ณ„์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. SCL ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ž˜๋ผ๋‚ด์–ด ๊ฑฐ๊ธฐ์— 0.1 "์ ํผ ์ปค๋„ฅํ„ฐ๋ฅผ ์žฅ์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธก์ •ํ•˜์ง€ ์•Š๋Š” ๋™์•ˆ ๊ฑฐ๊ธฐ์—๋Š” ์ผ๋ฐ˜ ์ ํผ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋‚ด๊ฐ€์žˆ์„ ๋•Œ 100 ์˜ด ์ €ํ•ญ์ด์žˆ๋Š” ์•” ์ปค๋„ฅํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ฒซ ๋ฒˆ์งธ ์‹œ๊ณ„์—๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํด๋Ÿญ ํ™•์žฅ์„ ์ „ํ˜€ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ (๋Œ€๋ถ€๋ถ„์˜ ํ•˜๋“œ์›จ์–ด I2C ์นฉ์ด ์•„๋งˆ๋„ ๊ทธ๋ ‡๋“ฏ์ด) ํด๋Ÿญ ํ™•์žฅ์ด ์ ์–ด๋„ ์ „์ฒด์ฃผ๊ธฐ ๋™์•ˆ ์ง€์†๋˜๋„๋กํ•จ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์น˜๋ฅผ 0.5 ๋งˆ์ดํฌ๋กœ ์ดˆ ๋‹จ์œ„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก i2c ์Šฌ๋ ˆ์ด๋ธŒ ์ฝ”๋“œ๋ฅผ ๊ณ„์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. I2C๋ฅผ ํ†ตํ•ด ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์น˜๋ฅผ XXX๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ๋ช…๋ น ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— 50 ๋ฐ€๋ฆฌ ์ดˆ ๋™์•ˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋กœ์ง ๋ถ„์„๊ธฐ๋กœ SDA ๋ฐ SCL ๋ผ์ธ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ์„ค์ •์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐ’ ๋ฒ”์œ„๋ฅผ ๋น ๋ฅด๊ฒŒ ์Šค์บ” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "use delay XXX"๋ฅผ ๋ณด๋‚ธ ๋‹ค์Œ sting์„ ๋ณด๋‚ด๋Š” ๋ฐ๋Š” 25 ๋ฐ€๋ฆฌ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ์นด์šดํ„ฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  "next delay"๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•ฝ 100ms ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•ฝ 10 ์ดˆ ์•ˆ์— 100 ๊ฐœ์˜ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์Šค์บ” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋” ๊ธด ์ง€์—ฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ๋ฅผ ๋ณด์•˜๋‹ค. ๋”ฐ๋ผ์„œ "์ฒ˜์Œ์—๋งŒ ๋ฐœ์ƒํ•œ๋‹ค"๋ผ๋Š” ์ด๋ก ์€ ์˜ณ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

"์ดˆ ํšจ์œจ์ ์ธ"์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ์— ๊ด€ํ•ด์„œ : ์˜ˆ, ์ €๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํด๋Ÿญ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ„ฐ๋ŸฝํŠธ ๋ฃจํ‹ด์— "์ด ๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ"์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ช‡ ๋งˆ์ดํฌ๋กœ ์ดˆ ๋˜๋Š” ๋ช‡ ๋ฐ€๋ฆฌ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์€ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋‹ค์Œ ๋ฐ”์ดํŠธ๋ฅผ ๊ณ„์†ํ•˜๊ธฐ ์ „์—์ด ๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒ ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ„ํš์€ 2835์˜ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์™„์ „ํžˆ ๋ง๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด์ œ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ ๋ฉˆ์ถ”๊ฒŒ ํ•œ ๋‹ค์Œ 70 ๋งˆ์ดํฌ๋กœ ์ดˆ ์•ˆ์— ๋ฐ”์ดํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•˜๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด 5 ๋งˆ์ดํฌ๋กœ ์ดˆ ๋ฐ˜ ์‹œ๊ณ„์˜ ์ค‘๊ฐ„์„ ๋ชฉํ‘œ๋กœ "์‚ฌ์ดํด ์นด์šดํŠธ"๋ฅผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘์„ ๋ชฉํ‘œ๋กœํ•œ๋‹ค๋ฉด (4.9 ๋งˆ์ดํฌ๋กœ ์ดˆ ํด๋ก ๋†’์€์ฃผ๊ธฐ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด) ๋‚ด ์Šฌ๋ ˆ์ด๋ธŒ์˜ ํด๋ก์ด ๋ช‡ ํผ์„ผํŠธ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ๋ฐ˜์ฃผ๊ธฐ๋ฅผ ๋” ์ผ์ฐ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ˜ ์‹œ๊ณ„์ฃผ๊ธฐ์˜ ์–‘์ชฝ ๋์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์งง์ง€ ๋งŒ ์œ ํšจํ•œ ์‹œ๊ณ„์ฃผ๊ธฐ๋ฅผ ๋ชฉํ‘œ๋กœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. SCL์ด "ํ•˜์ด ๊ตฌ๋™"(์ฆ‰, ์ „ํ˜€ ๊ตฌ๋™๋˜์ง€ ์•Š์Œ)๋˜๋ฉด I2C ๋ชจ๋“ˆ ๋งˆ์Šคํ„ฐ ํด๋Ÿญ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ„์Šค ์ปคํŒจ์‹œํ„ด์Šค๊ฐ€ ์‚ฌ์–‘์„ ์ดˆ๊ณผ ํ•  ๋•Œ ์ž๋™ ํด๋ก ์ŠคํŠธ๋ ˆ์นญ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ๊ธด I2C ๋ฒ„์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด : http://comments.gmane.org/gmane.linux.kernel.rpi/268 ๋ฐ์ด : http://news.gmane.org/gmane.linux.kernel.rpi ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, iz8mbw,ํ•˜์ง€๋งŒ์ด (ํ•˜๋“œ์›จ์–ด) ๋ฒ„๊ทธ์™€๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

I2C ํด๋Ÿญ์„ ์ธก์ •ํ–ˆ๋Š”๋ฐ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ƒ๊ฐํ•˜๋Š” 100kHz๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ์ฃผํŒŒ์ˆ˜๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” "ํด๋Ÿญ ์†Œ์Šค"๊ฐœ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผํŒŒ์ˆ˜๋ฅผ ์ธ์‡„ํ•˜๋„๋ก ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์•„์ง ๊ตฌ์„ฑํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ ์žํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„์œ„ํ•œ ์ •๋ณด๋ฅผ ์œ„ํ•ด ๋…ผ๋ฆฌ ๋ถ„์„๊ฐ€ ๋คํ”„ ํ˜•ํƒœ์˜ "์ฆ๊ฑฐ"๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€๋ฅผ ์ฒจ๋ถ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ LA ๋คํ”„๋Š” ์ฒจ๋ถ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค : http://prive.bitwizard.nl/LA_with_bug_scan_50_to_100_microseconds_delay.bin.gz

LA_with_bug_shot1.png ์ด๋ฏธ์ง€์—์„œ ์งง์€ ํ™œ๋™ ๋ฒ„์ŠคํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์ง€์—ฐ์„ XXX๋กœ ์„ค์ •"ํ•œ ๋‹ค์Œ 10 ๋ฐ”์ดํŠธ๋ฅผ ์“ฐ๋ ค๊ณ ํ•˜์ง€๋งŒ NACK๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜๋Š” ์ž‘์€ ๋ฒ„์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์—๋Š” ์ ์ ˆํ•œ 10 ๋ฐ”์ดํŠธ ํŒจํ‚ท์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. SDA ๋ผ์ธ์€ ๋‹ค์Œ ๋ฒˆ ๋ฒ„์ŠคํŠธ๊ฐ€ ์ž˜๋ชป ์ •๋ ฌ ๋  ๋•Œ๊นŒ์ง€ ๋‚ฎ๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค (๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ์ด๋™๋˜๊ณ  ๋‚ด ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ "xth-byte-in-packet"์นด์šดํ„ฐ๋Š” ํ•ด๋‹น ํŒจํ‚ท์˜ ์‹œ์ž‘์‹œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‹œ์ž‘ ์กฐ๊ฑด์— ์˜ํ•ด ์žฌ์„ค์ •๋˜์ง€ ์•Š์Œ). .

LA_with_bug_shot2.png ์ด๋ฏธ์ง€์—์„œ ์งง์€ ํŽ„์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ ํ™•๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณธ ๊ฐ€์žฅ ๊ธด ํŽ„์Šค๋Š” 290ns์ž…๋‹ˆ๋‹ค. (Atmel์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์‹œํŠธ ์‚ฌ์–‘ ์œ„!)
LA_with_bug_shot1
LA_with_bug_shot2

์˜ค, ๊ทธ๊ฒŒ ์–ด๋””์—์„œ ์™”๋Š”์ง€!

๋‚˜๋Š” ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—์„œ I2C๋กœ ์ œ์–ดํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์†”์งํžˆ ํฌ๊ธฐํ•˜๊ณ  ๋น„๊ธ€ ๋ณด๋“œ๋กœ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ Pi๊ฐ€ SPI๋ฅผ ํ†ตํ•ด FPGA์™€ ๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ I2C ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. .

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•  ์šฐํŽธ๋ฌผ์— ๊ฒŒ์‹œํŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ์ƒ ๋ฐฐ์†ก : ๋‚ด์ผ). SPI ์ปค๋„ฅํ„ฐ, I2C ์ปค๋„ฅํ„ฐ. ๊ทธ ๋ณด๋“œ๋กœ ์‹œ๋„ํ•˜๋Š” ์ข‹์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •๋ณด๋ฅผ ๊ณ„์† ๋ฐ›์œผ๋ ค๋ฉด ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์„ธ์š”.

ํ˜„์žฌ ์ƒํ™ฉ : ์ €๋Š” Gert์™€ ํ˜ธํ™˜๋˜๋Š” ํ–‰๋™์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ATMEGA ์ผ ๋•Œ "์ฒซ ๋ฒˆ์งธ ์ฃผ๊ธฐ๋งŒ ์ž˜๋ชป ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค", ๊ทธ๋ฆฌ๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์ œ ATTINY ์ค‘ ํ•˜๋‚˜ ์ผ ๋•Œ ๋ฒ„๊ทธ๊ฐ€ ์˜จ์ „ํžˆ ๋ณด์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ•œ ์ง€์—ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
i2c_delays_atmega
์ด ํ…Œ์ŠคํŠธ ์„ธ์…˜ ๋™์•ˆ ๊ด€์ฐฐ ๋œ ๊ฐ€์žฅ ์งง์€ SCL ํŽ„์Šค๋Š” 4.5 ๋งˆ์ดํฌ๋กœ ์ดˆ์˜€์Šต๋‹ˆ๋‹ค.

์ด์ œ attiny ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ํ…Œ์ŠคํŠธ ํ•œ ACK์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ๋œ ์ง€์—ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
i2c_delays_attiny

์ตœ์†Œ ํŽ„์Šค ํญ์€ 41ns (๋‚ด ์ธก์ • ํ•ด์ƒ๋„)์ž…๋‹ˆ๋‹ค.
i2c_delays_attiny2

์•„. ๊ทธ๊ฒƒ์„ ๋ฐœ๊ฒฌ! ๋ฐ”์ดํŠธ์˜ ACK ์ด์ „์— ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์€ "์œ„ํ—˜"ํ•œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ACK ์ดํ›„ ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค .....

์ €์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ํ™•์‹คํžˆ ๋ฐ˜๋ณต๋˜๋Š” ์‹œ์ž‘ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. proc hipi_i2c_read_register_rs์˜ http://cpansearch.perl.org/src/MDOOTSON/HiPi-0.26/BCM2835.xs ์— ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ํ•ดํ‚น์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ TX ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์‹œ๋„ํ•ด ๋ณด๊ฑฐ๋‚˜ C ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ–ˆ๋‹ค๊ณ ๋ณด๊ณ  ํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (5 ๋ช…์— ๋ถˆ๊ณผ ํ•จ). ์ปค๋„ ๋ชจ๋“ˆ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์œ„์˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ธฐ์กด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ปค๋„์ด I2C ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋™์ผํ•œ ํ•€์—์„œ ๋น„ํŠธ ๋ฑ…๋“œ GPIO ๊ธฐ๋ฐ˜ I2C๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ํ•˜๋“œ์›จ์–ด ์ž์ฒด์˜ ๋ฒ„๊ทธ๋ณด๋‹ค ๋” ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์˜ค๋ฒ„ ํ—ค๋“œ๋ฅผ ์˜ˆ์ƒํ•˜์‹ญ๋‹ˆ๊นŒ? ํ˜„์žฌ ๋“œ๋ผ์ด๋ฒ„์˜ ๊ธฐ๋ณธ๊ฐ’์€ 100kHz ํด๋Ÿญ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ i2c intertial ์„ผ์„œ์—์„œ 10 ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š” ๋ฐ ์•ฝ 1ms๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋น„ํŠธ ๋ฑ…์„ํ•œ๋‹ค๋ฉด ๊ทธ ์‹œ๊ฐ„์— CPU ์‚ฌ์ดํด์„ ๋’คํ”๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ....

ํ•„์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์€ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ชจ๋“ˆ ๋งค๊ฐœ ๋ณ€์ˆ˜ (๋˜๋Š” ๋” ํŽธ๋ฆฌํ•œ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ๋ชจ๋“ˆ)๋ฅผ ํ†ตํ•ด i2c ๋น„ํŠธ ๋ฑ…ํ‚น์„ ์„ ํƒ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งŽ์€ ์žฅ์น˜๊ฐ€ ํด๋Ÿญ ํ™•์žฅ (๋˜๋Š” ์ œํ•œ๋œ ์–‘๋งŒํผ ํด๋Ÿญ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์†Œ ๋œ ์†๋„๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Œ)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ํ•˜๋“œ์›จ์–ด I2C ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—ฌ์ „ํžˆ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

์ปค๋„ ์ž์ฒด์—๋Š” GPIO ํ•€์— ๋น„ํŠธ ๋ฑ… ๋œ I2C ์šฉ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ์œผ๋ฉฐ,์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ๋น„ํŠธ ๋ฑ…๊น…๋ณด๋‹ค ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ํ›จ์”ฌ ์ ์œผ๋ฉฐ ํ•˜๋“œ์›จ์–ด I2C ๋“œ๋ผ์ด๋ฒ„์™€ ๋™์ผํ•œ API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ œ์•ˆ์€ ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„์™€ ํ•˜๋“œ์›จ์–ด I2C ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ชจ๋‘ ๋ชจ๋“ˆ๋กœ ์ปดํŒŒ์ผ ํ•œ ๋‹ค์Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋“œ์›จ์–ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ—‰
Pi์—์„œ bitbanged I2C ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?
๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ํ•œ .config ์˜ต์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์†Œ์Šค ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
์‚ฌ์šฉํ•  ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ (modprobe? ๋‹ค๋ฅธ / dev / ์žฅ์น˜?)

Pi์—์„œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ BeagleBoard์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์นœ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ตฌ์„ฑ ์˜ต์…˜์€ I2C_GPIO์ž…๋‹ˆ๋‹ค.
์ด ๋“œ๋ผ์ด๋ฒ„์™€ broadcom ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋ชจ๋‘ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ์ปค๋„ ๋ชจ๋“ˆ์„๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋งŒ ํผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
GPIO ๋ชจ๋“ˆ์€ SDA ๋ฐ SCL๋กœ ์‚ฌ์šฉํ•  GPIO๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ dirvers / i2c / busses / i2c-gpio.c์˜ ์ž˜ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” 'sda = X scl = Y'์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ X์™€ Y๋Š” ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ•€์ž…๋‹ˆ๋‹ค.

i2c-gpio ๋ชจ๋“ˆ ์ž์ฒด๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ตœ์†Œํ•œ ๋ฒ„์Šค ๋ฒˆํ˜ธ, SDA ๋ฐ SCL ํ•€์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ๋ชจ๋“ˆ์˜ ๊ฐœ๋… ์ฆ๋ช…์„ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ ํ•€ 0๊ณผ 1์—์„œ๋„ ์ž‘๋™ํ–ˆ์ง€๋งŒ i2c-bcm2708์ด๋กœ๋“œ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค (pcf8574๊ฐ€ i2cdetect์—์„œ ๊ฐ์ง€๋˜์—ˆ์œผ๋ฉฐ gpio-pcf857x ๋ชจ๋“ˆ๋กœ ์ผ๋ถ€ LED๋ฅผ ๊ตฌ๋™ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ํ•˜์ง€๋งŒ ํ•€์„ ๋ฐ”๊ฟ€ ๋•Œ pcf8574๋ฅผ ํƒœ์›Œ์„œ (์ง€๊ธˆ์€ ๋‹ค๋ฅธ i2c ์นฉ์ด ์—†์Šต๋‹ˆ๋‹ค) ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋ฟก๋ฟก
sda_pin / scl_pin ๋ชจ๋“ˆ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์ฒ˜๋Ÿผ.
๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณด๊ธฐ๋ณด๋‹ค ๋œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋๊นŒ์ง€ ์ „๋‹ฌ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ํ”Œ๋žซํผ์€ ํ˜„์žฌ ์‚ฌ์šฉํ•  GPIO๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. (์ผ๋ฐ˜์ ์œผ๋กœ ํ”Œ๋žซํผ ๋ฐ์ดํ„ฐ๋Š” "How is / this / computer wired"๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.)

๋ฟก ๋นต๋€จ
๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์–ด์ œ ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•œ ๋ฒˆ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฒ„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. GPIOS export ๋ฐ unexport sysfs ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๋™์  ๋ฐฉ์‹ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ๋ฒ„์Šค๋ฅผ ์™„์ „ํžˆ ๋‚ด ๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)? ์•„, ๋˜ ๋‹ค๋ฅธ pcf8574๋ฅผ ์ฐพ์•˜๊ณ  ์™ธ๋ถ€ ํ’€์—… ์ €ํ•ญ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค๋ฅธ GPIO ํ•€์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ํ…Œ์ŠคํŠธ ํ•  ๋” ์ •๊ตํ•œ IยฒC ์žฅ์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์„ ๊ธฐ๋ณธ ์ปค๋„ ํŠธ๋ฆฌ์— ์ œ๊ณตํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฟก๋ฟก
์ด์™€ ๊ฐ™์€ ๋ชจ๋“ˆ์„ ํ…Œ์ŠคํŠธ ํ•  ์„ค์ •์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์นฉ์ด ์ œ๊ณตํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ๊ธฐ๋Šฅ (์˜ˆ : I2C)์—๋Š” ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปค๋„ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. I2C ํ•˜๋“œ์›จ์–ด์— ์‚ฌ๋žŒ๋“ค์ด ํŠน์ • ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ๋น„ํŠธ ๋ฑ…ํ‚น ๋Œ€์ฒด ์‚ฌ์šด๋“œ๊ฐ€ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฌดํ•ด ํ•ด ๋ณด์ด๋Š” ์ƒˆ ๋“œ๋ผ์ด๋ฒ„ (์˜ˆ : ๋ชจ๋“ˆ๋กœ ๋นŒ๋“œ๋˜๊ณ ๋กœ๋“œ ๋  ๋•Œ๊นŒ์ง€ ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š์Œ)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ฆ๊ฑฐ (์˜ˆ : ์‚ฌ์šฉ์ž ๋ณด๊ณ ์„œ๋ฅผ ํ™•์ธํ•˜๋Š” ์ผ๋ถ€)๊ฐ€ ์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. PR์„ ๋ฐ›์•„ ๋“ค์—ฌ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

BCM2837 (RPi 3)์—์„œ HW๊ฐ€ ์ˆ˜์ • ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ์ถ”์ธก์€ ์•„๋‹ˆ์˜ค์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋Š˜ ํ…Œ์ŠคํŠธ ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BCM2837 I2C๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•ˆํƒ€๊น์ง€๋งŒ ์ •๋ณด์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. BCM2837 ์ •์˜คํ‘œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ๋‰ด์Šค๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ ํŽธ๋ฆฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” @ P33M , Broadcom์—์„œ ์ผํ•œ๋‹ค๋ฉด ๊ถŒ์œ„์žˆ๋Š” ์‚ฌ๋žŒ์œผ๋กœ ์ธ์šฉ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Š” ๊ถŒ์œ„์ ์ด์ง€๋งŒ Broadcom์—์„œ ์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ž˜ ๋๋„ค์š”. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๋ฏธ ๊ตฌ๊ธ€์„ ๊ฒ€์ƒ‰ํ–ˆ๊ณ , P33M์ด ๋‹ค๋ฅธ ๊ณณ์—์„œ M33P ์ธ ๊ฒƒ ์™ธ์—๋Š” ์œ ์šฉํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ID๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์ง€ ๋งŒ ๊ทธ๊ฐ€ ์ธ์šฉ ํ• ๋งŒํ•œ ํ›Œ๋ฅญํ•œ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹˜์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. :-) ๋”ฐ๋ผ์„œ ์ •์˜คํ‘œ ๋งํฌ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@ P33M ์€ Raspberry Pi์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์œ„์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์˜คํ‘œ ๋ชฉ๋ก์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋ฅผ ๋– ๋‚ฌ๋‹ค
๊ทธ์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋“  ๋ง๋“ !

2016 ๋…„ 3 ์›” 15 ์ผ 14:30์— RalphCorderoy [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ž˜ ๋๋„ค์š”. ํ•˜์ง€๋งŒ ์ €๋Š” ์ด๋ฏธ Google ๊ฒ€์ƒ‰์„ํ–ˆ๊ณ  P33M์ด M33P ์ธ ๊ฒƒ ์™ธ์—๋Š”
๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ID๋ฅผ ์ฐพ๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์•„์š”
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฐ€ ์ธ์šฉํ•˜๊ธฐ์— ์ข‹์€ ์ถœ์ฒ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. :-) ๋”ฐ๋ผ์„œ ์ •์˜คํ‘œ ๋งํฌ๋Š”
๋Šฅ์ˆ™ํ•œ.

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/raspberrypi/linux/issues/254#issuecomment -196845789

@RalphCorderoy ์ €๋Š” Raspberry Pi (trading) Ltd.์˜ ์ง์›์ž…๋‹ˆ๋‹ค. ์ œ ๋Œ€๋‹ต์€ ๊ถŒ์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@ P33M , Ta, ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒˆ๊ฑฐ๋กœ์›Œ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ž‘์—…์ค‘์ธ ํ”„๋กœ์ ํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜ ํŽŒ์›จ์–ด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž˜๋ชป๋œ ๋™์ž‘์„ ๊ฑด๋„ˆ ๋›ฐ๋Š” ์‘๋‹ต์— ์ถ”๊ฐ€ ๋ฐ˜์ฃผ๊ธฐ ์ง€์—ฐ (ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์น˜)์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•œ ์ข‹์€ ๋ถ„์„์€ advamation.com ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Broadcom์˜ I2C ๊ตฌํ˜„์—์ด ๋ถˆ๋Ÿ‰ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ํ•˜๋“œ์›จ์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์ปค๋„์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐœ๋ฐœ์ค‘์ธ ์ œํ’ˆ์—์„œ๋„์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์œผ๋ฏ€๋กœ์ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ๊ธˆ ๊ตฌ๋…ํ–ˆ์Šต๋‹ˆ๋‹ค.
AVR๊ณผ Pi ์‚ฌ์ด์— i2c๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์‹œ ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋ˆ„๊ตฌ๋“ ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ํ˜•ํƒœ์˜ i2c ๋น„ํŠธ ๋ฑ…ํ‚น์„ ์‚ฌ์šฉ ํ–ˆ์Šต๋‹ˆ๊นŒ?

@ mwilliams03 , ์ด ํ”„๋กœ์ ํŠธ์— ๊ด€์‹ฌ ์ด ํ”„๋กœ์ ํŠธ ๋Š” Raspberry Pi์™€ AVR ์‚ฌ์ด์— 100kHz ๋ฐ 400kHz I2C ํ†ต์‹ ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋น„ํŠธ ๋ฑ…์ž‰์ด ์•„๋‹ˆ๋ผ ํ•˜๋“œ์›จ์–ด I2C ์ง€์›์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•ต์‹ฌ ํฌ์ธํŠธ์— ์ง€์—ฐ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. AVR์€ 400kHz์—์„œ ์ถ”๊ฐ€ ์ง€์—ฐ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ ์ถฉ๋ถ„ํžˆ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋‹ค์Œ์€ I2C ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด ์ž…๋‹ˆ๋‹ค. AVR์˜ TWI ๋ชจ๋“ˆ์—๋Š” ๋น ๋ฅธ ์ฝ๊ธฐ๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ pdg137 , ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ๊ณ  ์ฒ˜์Œ์—๋Š” ์˜ค๋ฅ˜์—†์ด 120 ๋งŒ

@rewolff ๋Š”์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜์‹ญ์‹œ์˜ค.

์ด์ œ .... ๋ ˆ๋ฒจ ์‹œํ”„ํ„ฐ์™€ 40cm์˜ ์—ฐ์žฅ ์ผ€์ด๋ธ”์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์ด๋กœ ์ธํ•ด ํŒŒํ˜•์˜ "์œ„์ชฝ"์—์„œ ์ถฉ๋ถ„ํ•œ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋ฒ„๊ทธ๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, broadcom๊ณผ ์ง์›๋“ค์€ ์—ฌ์ „ํžˆ์ด ๋ฒ„๊ทธ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ฐ”์ดํŠธ ์ดํ›„ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ (์‹ค์ œ๋กœ๋Š” ๋ฐ˜ ์‹œ๊ณ„)๋กœ ์ œํ•œ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 10 ๋งˆ์ดํฌ๋กœ ์ดˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ 2 ๊ฐœ์˜ ๋ฐ˜ ์‹œ๊ณ„๋กœ ๋„˜์–ด ๊ฐ€๊ณ  ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—์„œ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ๋งˆ๋‹ค ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถœ ์ˆ˜์žˆ๋Š” "๋‚˜์œ"์ˆœ๊ฐ„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

SPI์™€ I2C ์‚ฌ์ด์˜ ๋Œ€์นญ์œผ๋กœ ์ธํ•ด ๋‹ค์Œ ๋ฐ์ดํ„ฐ ๋ฐ”์ดํŠธ๊ฐ€ "๋‹ค์Œ ๋ฐ์ดํ„ฐ"์ธํ„ฐ๋ŸฝํŠธ์—์„œ "๊ณ„์‚ฐ"๋˜๋Š” ๊ฒฝ์šฐ AVR ์ฝ”๋“œ์—์„œ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค .... (๊ณ„์† ์ฝ๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋…ธ์ถœํ•˜๋ฏ€๋กœ 16 ๋ฐ”์ดํŠธ ๋ฒ„ํผ ํ•ญ์ƒ ์ถฉ๋ถ„ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.).

๋‚˜๋Š” ํ™•์‹ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

Respberry Pi์™€ ATMEGA 324PA ์‚ฌ์ด์— SMBus์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? https://stackoverflow.com/questions/39274784/talking-smbus-between-raspberr-pi-and-atmega-324pa-avr-not-clock-stretching

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, broadcom๊ณผ ์ง์›๋“ค์€ ์—ฌ์ „ํžˆ์ด ๋ฒ„๊ทธ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ฐ”์ดํŠธ ์ดํ›„ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ (์‹ค์ œ๋กœ๋Š” ๋ฐ˜ ์‹œ๊ณ„)๋กœ ์ œํ•œ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@rewolff : Broadcom ์ง์›๋“ค๊ณผ ๋™์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ…Œ์ŠคํŠธ์—์„œ Raspberry Pi 3 ๋ฐ 100kHz I2C (CPU๊ฐ€ ์Šค๋กœํ‹€ ๋  ๋•Œ 62kHz๋กœ ๋Š๋ ค์ง) ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณผ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ

์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์†Œ๋ฆฌ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚ด ๊ฒฝํ—˜๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ผ๋กœ ๋ฐ”์˜๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋ฉด, ๋‚ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฃจํ‹ด (ํ•˜๋“œ์›จ์–ด ํด๋Ÿญ ํ™•์žฅ ํฌํ•จ)์—์„œ ๋‹จ์ˆœํžˆ "usleep (10)"์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ผ์ด ์ž ๊ธฐ์ง€ ์•Š๊ฒŒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. :-(

@rewolff : Raspberry Pi 3์—์„œ CPU๊ฐ€ 600MHz๋กœ ์กฐ์ ˆ๋˜์–ด ๊ธฐ๋ณธ I2C ์†๋„๊ฐ€

Raspberry Pi ์ปค๋„์— @kadamski ์˜ i2c-

๋˜ํ•œ์ด ์ „์ฒด ๋ฌธ์ œ์˜ ์›์ธ์ด๋˜๋Š” HW ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@onnokort 2015 ๋…„ 11 ์›” ์ดํ›„ ํ˜„์žฌ ์ปค๋„์—์žˆ๋Š” i2c-gpio ์˜ค๋ฒ„๋ ˆ์ด์™€ ๊ฐ™์€ ์˜๋ฏธ์ž…๋‹ˆ๊นŒ? https://github.com/raspberrypi/linux/blob/rpi-4.4.y/arch/arm/boot/dts/overlays/i2c-gpio-overlay.dts
์˜ค๋ฒ„๋ ˆ์ด์— ๋Œ€ํ•œ README์—์„œ :

Name:   i2c-gpio
Info:   Adds support for software i2c controller on gpio pins
Load:   dtoverlay=i2c-gpio,<param>=<val>
Params: i2c_gpio_sda            GPIO used for I2C data (default "23")

        i2c_gpio_scl            GPIO used for I2C clock (default "24")

        i2c_gpio_delay_us       Clock delay in microseconds
                                (default "2" = ~100kHz)

@ 6by9 : ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•„์ง ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์˜ˆ, ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ฐพ๊ณ  ์žˆ๋˜ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค (i2c-gpio-param์—์„œ ๋ฐœ๊ฒฌ).

@popcornmix @ 6by9 ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? looong ์‹œ๊ฐ„ ์ฃผ์œ„์— ์žˆ์—ˆ๊ณ  ๋‚ด ๋…์„œ์—์„œ dt param ํ•ญ๋ชฉ์€ ๊ดœ์ฐฎ์€ ์˜ต์…˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

I2C ํ•˜๋“œ์›จ์–ด์—์„œ ํ™•์‹คํžˆ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์žฅ์น˜์— ๊ถŒ์žฅ๋˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ํ•€์„ ๋น„ํŠธ ๋ฐฐ์‰ฌํ•˜๋Š” i2c-gpio ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฃผ์†Œ ACK ๋‹จ๊ณ„์˜ ํด๋Ÿญ ํ™•์žฅ์ด ์—…์ŠคํŠธ๋ฆผ ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ 2 ์„ผํŠธ : https://github.com/555kav555/i2c-bcm2835-corrected

์˜ค๋Š˜ ์ €๋Š” ๋™์•„์‹œ์•„์˜ GY-955 ํŒจํ‚ค์ง€์—์žˆ๋Š” BNO055๋ฅผ Pi 2B (BMC2835)๋กœ 100_000Hz์—์„œ ๋งค์šฐ ์ถ”ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด I2C ๋ฒ„์Šค์˜ ์ฃผํŒŒ์ˆ˜๋ฅผ 50_000์—์„œ 400_000Hz๋กœ ๋ณ€๊ฒฝํ–ˆ๊ณ  100_000Hz์—์„œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์ง€๋งŒ 50_000, 85_000, 115_000 ๋ฐ 125_000Hz์˜ ๊ฒฝ์šฐ Adafruit (Adafruit_Python_BNO055)์˜ ์ฝ”๋“œ๋Š” I2C ์—ฐ๊ฒฐ, 150_000์—์„œ ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Hz๋Š” BNO055์— ๋น„ํ•ด ๋„ˆ๋ฌด ๋น ๋ฅด์ง€ ๋งŒ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ฐ’์ด ๋•Œ๋•Œ๋กœ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค์‹ค๋กœ์Šค์ฝ”ํ”„๋กœ ์ฃผํŒŒ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ / sys / class / i2c-adapter / i2c-1 / of_node / clock-frequency ํŒŒ์ผ ๋งŒ ์ฝ์—ˆ์œผ๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ๋ถˆํ™•์‹ค์„ฑ์ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ADA์—์„œ BNO055์— ๋Œ€ํ•œ ์ „์ฒด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
Facit : BMC I2C ์ฒ˜๋ฆฌ์˜ ํ•˜๋“œ์›จ์–ด ๋ฒ„๊ทธ๋Š” 100_000Hz์—์„œ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ํ•˜๋“œ์›จ์–ด ๋ฒ„๊ทธ๋Š” ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜๊ฐ€ ํด๋ก ์ŠคํŠธ๋ ˆ์นญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  0.9 ~ 0.999 I2C ํด๋ก์ฃผ๊ธฐ ํ›„์— SCL ๋ผ์ธ์„ ํ•ด์ œ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ธ์ด ์ƒ์Šนํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ํŒŒ์ด ํ•˜๋“œ์›จ์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค, ๊ทธ๋Š” ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์„ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํด๋Ÿญ ๋ผ์ธ์„ ๋‹ค์‹œ ๋‚ฎ๊ฒŒ ๋‹น๊ฒจ์„œ ๋‹ค์Œ ํด๋Ÿญ ํŽ„์Šค๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๋Š” ํด๋Ÿญ ๊ธฐ๊ฐ„์— ๋‚จ์€ ์‹œ๊ฐ„์ด clk ๋ผ์ธ์ด ๋ผ์ฆˆ๋ฒ ๋ฆฌ์˜ "HIGH"์ž„๊ณ„ ๊ฐ’์„ ํ†ต๊ณผํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜์— ๋Œ€ํ•ด์„œ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์Šฌ๋ ˆ์ด๋ธŒ์— ๋…ธ์ด์ฆˆ ํ•„ํ„ฐ๋ง์ด ์žˆ๊ณ  <x %์˜ ์‹œ๊ฐ„ ๋™์•ˆ ๋†’์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ I2C ํด๋ก ์‚ฌ์ดํด ๊ธ€๋ฆฌ์น˜.

์ด๊ฒƒ์€ "100kHz์—์„œ๋งŒ ๋ฐœ์ƒ"ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜์˜ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋‹ค๋ฅธ ๊ฐ’์ด์–ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ฃผํŒŒ์ˆ˜์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿญ์ด 100kHz๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ •์ƒ์ฃผ๊ธฐ๋Š” 5us ๋†’๊ณ  5us ๋‚ฎ์Šต๋‹ˆ๋‹ค. ์ด์ œ t = 0์—์„œ pi๊ฐ€ ํด๋ก ๋ผ์ธ์„ ๋กœ์šฐ๋กœ ๋‹น๊ฒจ ๋งˆ์ง€๋ง‰ ํด๋ก ์‚ฌ์ดํด์„ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. t = 5us์—์„œ pi๋Š” ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ ํ•ด์ œํ•˜์ง€๋งŒ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์—ฌ์ „ํžˆ ๋ฐ”์˜๊ณ  ํด๋Ÿญ์„ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. t = 9us์—์„œ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. t = 10us์—์„œ ํŒŒ์ด๋Š” ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ๋ณด๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข‹์Šต๋‹ˆ๋‹ค. ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜๋ฉด ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ ๋‹ค์‹œ ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค. ํด๋Ÿญ ์‹ ํ˜ธ๋Š” ์ด์ œ 1us ๋™์•ˆ ๋งŒ ๋†’์•˜์œผ๋ฉฐ (์ปคํŒจ์‹œํ„ด์Šค ๋ฐ ํ’€์—… ์ €ํ•ญ์˜ ์‹œ๊ฐ„ ์ƒ์ˆ˜๋กœ ์ธํ•ด ์•ฝ๊ฐ„ ๋” ์ ์Œ) ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค๋ฅธ ์žฅ์น˜๋Š” 9 ๋งˆ์ดํฌ๋กœ ์ดˆ ํ›„์— ์ค€๋น„๋˜์ง€ ์•Š๊ณ  10.5 ํ›„์— ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์ด์ œ 100kHz์—์„œ ํŒŒ์ด๋Š” "์•„์ง ๋‚ฎ๊ณ , ํด๋Ÿญ์ด ๋Š˜์–ด๋‚˜๊ณ , 5 ๋งˆ์ดํฌ๋กœ ์ดˆ๋ฅผ ๋” ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด์ œ 4.5 ๋งˆ์ดํฌ๋กœ ์ดˆ ํด๋Ÿญ ํŽ„์Šค๋ฅผ ์–ป๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ์ด ์žฅ์น˜๋ฅผ 90kHz๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. pi๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ 11 ๋งˆ์ดํฌ๋กœ ์ดˆ๋ฅผ๋ณด๊ณ  ํด๋Ÿญ ์‹ ํ˜ธ๋Š” 1 ๋งˆ์ดํฌ๋กœ ์ดˆ ๋ฏธ๋งŒ-> ๋ฌธ์ œ๋กœ ๋†’์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋ฅธ ์žฅ์น˜๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๊ธฐ๋ณธ 100kHz์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„๊ทธ๋Š” ์—ฌ์ „ํžˆ ๋งค์šฐ ํ˜„์‹ค์ ์ด๋ฉฐ ์‚ฌ์šฉ์ž์™€ ๋‚ด๊ฐ€ ๋ณด์œ ํ•œ ์žฅ์น˜๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฒ„์Šค ์†๋„๋กœ ํ•ด๋‹น ์žฅ์น˜์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‘๋‹ต ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์ฃผํŒŒ์ˆ˜์—์„œ ์•ˆ์ •์ ์ธ ์ „์†ก์„ ์–ป์€ ์ด์œ ๋ฅผ ๋งค์šฐ ์ž˜ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
100_000Hz์—์„œ ๋ฌธ์ œ๋Š” 9 ~ 9.99ยตsec ๊ธฐ๊ฐ„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
85_000 Hz์—์„œ ๋ฌธ์ œ๋Š” 1_000_000 / 85_000 * .9 = 10,59 ยตsec> 9.99 sec์—์„œ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์นญ์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. 85_000 Hz ๋ฏธ๋งŒ์˜ ๋ชจ๋“  ์ฃผํŒŒ์ˆ˜์— ๋Œ€ํ•ด ๋ฌธ์ œ์˜ ์‹œ์ž‘์ ์ด 10,59 ยตsec๋ณด๋‹ค ๋†’์Šต๋‹ˆ๋‹ค. .
115_000 Hz์—์„œ ๋ฒ„์Šค ์‚ฌ์ดํด์€ 1_000_000 / 125_000 = 8.7 ยตsec <9 ยตsec์ด๋ฏ€๋กœ ํด๋Ÿญ ์ŠคํŠธ ๋ ˆํŒ…์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ์ง€๋˜๋ฉฐ 115_000 Hz๋ณด๋‹ค ๋†’์€ ๋ชจ๋“  ์ฃผํŒŒ์ˆ˜์— ๋Œ€ํ•ด ๋ฒ„์Šค์ฃผ๊ธฐ๋Š” 8.7 ยตsec ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ํ•„์š”ํ•œ ์ฃผํŒŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html์—์„œ ์ •๋ณด๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๊ฐ„์˜ .9 ๋Œ€์‹  .5๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค).

์ž˜. ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์œ ํšจํ•œ ํด๋ก ์‹ ํ˜ธ๋กœ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฒ„์Šค์˜ RC๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ง€์—ฐ๋˜๋Š”์ง€. ํ•„์ž์˜ ๊ฒฝ์šฐ ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ์‚ฌ์šฉํ•˜๋Š” AVR์€ 2 ํด๋Ÿญ ์‚ฌ์ดํด ๋ฏธ๋งŒ์˜ ํŽ„์Šค๋ฅผ ๊ธ€๋ฆฌ์น˜๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ RC ํด๋Ÿญ์ด 8MHz (+/- 10 % !!!) ์ธ ๊ฒฝ์šฐ ํŽ„์Šค๋ฅผ ๊ฐ์ง€ํ•˜๋ ค๋ฉด ์ตœ์†Œ 250ns๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. I2C ์‚ฌ์–‘์—๋Š” 5 ๋งˆ์ดํฌ๋กœ ์ดˆ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ณต์‹์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๊ณผ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์‚ฌ์ด์—๋Š” 20์˜ "๋งˆ์ง„"์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ๋‚˜๋Š” ๋…ธ์˜ˆ์˜ ์‹œ๊ณ„๋ฅผ ๋Š˜๋ ค์„œ 12us๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ„์Šค ์ปคํŒจ์‹œํ„ด์Šค๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ผ์œผํ‚ฌ ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ง€์—ฐ์„ ์ถ”๊ฐ€ ํ•  ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ณ ๊ฐ์—๊ฒŒ ํ‘œ์ค€ 100kHz i2c๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ๋งํ•ด์•ผํ•˜๋Š” ๋ถˆํŽธ ํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์‹œ๊ฐ„์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ œ๊ฒŒ ์ฃผ์‹  ๋ชจ๋“  ์ •๋ณด์— ๊ฐ์‚ฌ ๋“œ๋ฆฌ๋ฉฐ ๋งค์šฐ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” 2 ๊ฐœ์˜ MEMS (GY-055๋กœ ํŒจํ‚ค์ง• ๋œ BNO055, MPU-9250 / 6500์œผ๋กœ ํŒจํ‚ค์ง• ๋œ MPU9255, WHO_AM_I ๋ ˆ์ง€์Šคํ„ฐ์— MPU9255๋กœ ํ‘œ์‹œ๋จ) ๋ฐ 1 ๊ฐœ์˜ GPIO ํ™•์žฅ๊ธฐ PCF 8574 (ํŒจํ‚ค์ง• ๋œ PCF 8574)๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.
Pi (2b)์˜ I2C ํด๋Ÿญ์€ 125kHz๋กœ ์„ค์ •๋˜์—ˆ์œผ๋ฉฐ / sys / class / i2c-adapter / i2c-1 / of_node / clock-frequency๋ฅผ ์ฝ์–ด ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์ฝ”๋“œ๋Š” MEMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  0.1 ์ดˆ์˜ ์ง€์—ฐ์œผ๋กœ PCF ์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•ด 100 ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ:

  • MEMS ์ดˆ๊ธฐํ™”์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
  • I2C ๋ฒ„์Šค๋ฅผ ํ†ตํ•œ MEMS ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ๋Š” ๋ชจ๋“  ์‚ฌ์ดํด์—์„œ ์„ฑ๊ณต์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • I2C ๋ฒ„์Šค๋ฅผ ํ†ตํ•ด PCF์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ์ดํด์—์„œ ์„ฑ๊ณต์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ MEMS์™€ PCF๋Š” ํ‘œ์ค€ 100kHz๋ณด๋‹ค ๋†’์€ ํด๋Ÿญ์„ ์ˆ˜์šฉํ•ฉ๋‹ˆ๋‹ค.
๋…ธ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” AVR๊ณผ์˜ ํ†ต์‹ ์ด ์ง๋ ฌ ํšŒ์„ ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ณ , ๋‘ ๋ฒˆ์งธ ํ™˜๊ฒฝ์—์„œ๋Š” ํ†ต์‹ ์ด USB๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด ์ง€์ง€๋งŒ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ BNO055๋กœ ์ธํ•œ I2C ๋ฒ„์Šค ๋ฌธ์ œ๋กœ ์ธํ•ด ํŠธ๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ™˜๊ฒฝ์„ ์œ„ํ•ด Pi 2b์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์œผ๋ฉฐ Pi 3์—์„œ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹ค์Œ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ 2 ๊ฐœ์˜ ๋‹ค๋ฅธ MEMS, 1 ๊ฐœ์˜ VL53L0X ๋ฐ 1 ๊ฐœ์˜ BME280์„ ํ†ตํ•ฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ฃผํŒŒ์ˆ˜์—์„œ ์ž‘๋™ํ•˜๊ณ  ๋ฒ„์Šค ์ปคํŒจ์‹œํ„ด์Šค๊ฐ€ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹์ˆ˜์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ €๋Š” ํ˜„์žฌ RPi 3 Model B +์—์„œ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฉฐ Advamation ๊ธฐ์‚ฌ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฆฌ์ฝ˜์€ ์ตœ๊ทผ์— ์œ ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

์งง์€ ๋ฒ„์ „์€ read-preACK, write-preACK ๋˜๋Š” write-postACK๋กœ ํ™•์žฅํ•˜๋ฉด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ธธ๊ฑฐ๋‚˜ ์ „ํ˜€ ๋Š˜๋ ค์•ผ ํ•  ์œ ์ผํ•œ ์‹œ๊ฐ„์€ read-postACK์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ํ™•์‹คํ•œ ๋ง์„ํ•˜๊ธฐ ์ „์— ์‹คํ—˜์„ ์ •๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € ์šฉ์–ด์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Advamation ๊ธฐ์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Raspberry Pi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” I2C๋Š”
์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์‹œ๊ณ„ ํ™•์žฅ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜
์Šฌ๋ ˆ์ด๋ธŒ๋Š” I2C ์ฝ๊ธฐ ACK ๋‹จ๊ณ„ (ACK / NACK์„ ์ฝ์€ ํ›„) ์งํ›„์— ์ข…๋ฃŒ์‹œ์—๋งŒ ํด๋ก์„ ๋Š˜์ด๊ณ  ๊ทธ ๋‹ค์Œ์—๋Š” 0.5 ํด๋ก์ฃผ๊ธฐ ์ด์ƒ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

"I2C-read-ACK-phase"๋ผ๋Š” ์šฉ์–ด๋Š” ๋‹ค์†Œ ๋ชจํ˜ธํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. I2C ์ฝ๊ธฐ ๋ช…๋ น (์ฆ‰, post-address R / Wฬ… ๋น„ํŠธ๊ฐ€ ์„ค์ • ๋จ) ์ธ ๊ฒฝ์šฐ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ฌ๋ฆฌ Aฬ…Cฬ…Kฬ… ๋น„ํŠธ๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ "read-postACK"๋ผ๊ณ  ๋งํ•˜๋ฉด R / Wฬ… ๋น„ํŠธ๊ฐ€ ์ฃผ์†Œ ๋ฐ”๋กœ ๋’ค์— ์„ค์ •๋˜์–ด (์•„๋งˆ๋„ SMBus์ฒ˜๋Ÿผ ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜ ์Œ) ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ Aฬ…Cฬ…Kฬ… ์‘๋‹ต์„ ์ž‘์„ฑํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์•”์‹œํ–ˆ๋“ฏ์ด RPi๊ฐ€ SCL์ด ์Šฌ๋ ˆ์ด๋ธŒ์— ์˜ํ•ด ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๊ณ  ์žˆ์Œ์„ ๊ฐ์ง€ํ•˜๋ฉด ๋‚ด๋ถ€ SCL ํด๋Ÿญ์ด ๋ฐ˜์ฃผ๊ธฐ (5ฮผS)๋งŒํผ ์ง€์—ฐ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋Š” ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ _almost_ ๋ฐ˜์ฃผ๊ธฐ ๋™์•ˆ SCL์„ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•˜๋ฉด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด RPi๋Š” ์—ฌ์ „ํžˆ SCL์„ ํ•˜์ด๋กœ ๋‚ด๋ฆฐ ๋‹ค์Œ SCL ํด๋Ÿญ์ด ํŠธ๋ฆฌ๊ฑฐ ๋  ๋•Œ ์ฆ‰์‹œ ์•„๋ž˜๋กœ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ผ๋ถ€ ์žฅ์น˜๋Š” ํŽ„์Šค๋กœ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์žฅ์น˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ŸฐํŠธ ํด๋Ÿญ ํŽ„์Šค๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (์ฐธ๊ณ  : I2C ์‚ฌ์–‘ ์€ 5ฮผS์˜ ๊ณต์นญ SCL ํ•˜์ด ํƒ€์ž„์„ ์˜๋ฏธํ•˜๋ฉฐ RPi I2C ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋ณธ ์†๋„ ์ธ 100kHz์—์„œ ์ตœ์†Œ 4.0ฮผS ์‹œ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.)

๋‚ด ์‹คํ—˜์—์„œ read-preACK, write-preACK ๋ฐ write-postACK ๋‹จ๊ณ„์—์„œ RPi๋Š” ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ SCL ํ•˜์ด ํƒ€์ž„์ด 4ฮผS ์ •๋„์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. SCL ํด๋Ÿญ์„ ๊ทธ ๋‹จ๊ณ„๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. RPi๊ฐ€ SCL ๋ผ์ธ์„ ์ถœ์‹œ ํ•œ ์งํ›„ ์ƒ˜ํ”Œ๋ง ํ•œ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋˜๋ฉฐ, SCL์ด ์—ฌ์ „ํžˆ ๋‚ฎ ์œผ๋ฉด SCL ํด๋Ÿญ์„ ๋ฐ˜ ์œ„์ƒ์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ read-postACK ๋‹จ๊ณ„์—์„œ SCL ๋ผ์ธ์ด ์•ฝ 6โ€“9ฮผS ๋™์•ˆ ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๋ฉด RPi๊ฐ€ ๋ŸฐํŠธ ํด๋Ÿญ (<4ฮผS, ์ข…์ข… 2ฮผS ์ดํ•˜)์„ ๋ฐฉ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ Broadcom ์—”์ง€๋‹ˆ์–ด๋Š” ๊ณ ์šฉ๋Ÿ‰ ๋ผ์ธ์—์„œ ๋ฐ˜ ์œ„์ƒ์„ ์ง€์—ฐ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ด๋ ค๋Š” ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์Šฌํ”„๊ฒŒ๋„-์šฐ๋ฆฌ๊ฐ€ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ-๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ˜„์žฌ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜์žˆ๋Š” read-postACK ๋‹จ๊ณ„ (์˜ˆ : ADC ๋ณ€ํ™˜)์—์„œ SCL์„ ยฝ ์‚ฌ์ดํด ์ด์ƒ์œผ๋กœ ํ™•์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹คํŒจํ•˜๋ฉด

ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ…Œ์ŠคํŠธ๋Š” PIC16F1619๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ์น˜๋Š” ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ACK ์ „ํ›„์˜ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ๋ช…๋ น ๋ชจ๋‘์—์„œ ํด๋ก์„ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ์ด ๋ฃจํ”„์˜ ๊ธธ์ด์™€ ์˜ค๋ฒ„ ํ—ค๋“œ๋Š” 3ฮผS (RPi๊ฐ€ SCL์„ ๋‚ฎ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์ž‘์Œ)์—์„œ 90ฮผS๊นŒ์ง€ 0.35ฮผS ์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. RPi์— ๋‘ ๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” Python ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์‹œ ์ฝ์€ ๋‹ค์Œ ๋‹ค์‹œ ์ฝ๊ธฐ ๊ฐ’์ด ์ •ํ™•ํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’

Piquan,
Broadcom์€์ด ๋ฌธ์ œ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์น˜์—์„œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์„ ์–ธํ•จ์œผ๋กœ์จ์ด๋ฅผ ๊ฒฝ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. Advamation์€ broadcom ๋ฌธ๊ตฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@rewolff ๊ธ€์Ž„, ๊ทธ๋“ค์˜ ํ•ด์„์— ๋ญ”๊ฐ€๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์ฒซ ๋ฒˆ์งธ ํด๋Ÿญ ํ™•์žฅ"์ด "์ฃผ์–ด์ง„ ๋‹จ๊ณ„์—์„œ SCL์ด ๋‘˜ ์ด์ƒ์˜ ํด๋Ÿญ ๋ณ€ํ™˜์— ์˜ํ•ด ํ™•์žฅ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์‹œ๊ฐ„"์„ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์„ค๋ช…์ด ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ์ด์ƒ์˜ ํด๋Ÿญ ์ฃผ๊ธฐ๋กœ ํ™•์žฅํ•˜๋ฉด ์˜ˆ : ๋ชจ๋‘ 5 ๋‹จ๊ณ„ ์ด์ƒ ์ŠคํŠธ๋ ˆ์นญํ•˜๋ฉด ์ข‹์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ํ–ˆ๋˜ ๋ชจํ˜ธํ•œ ์‹คํ—˜์—์„œ; ๋” ์ •ํ™•ํ•œ ์‹คํ—˜์€ ์•„์ง ์˜ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

RPi์˜ I2C๊ฐ€ ํด๋Ÿญ ์ŠคํŠธ๋ ˆ์น˜๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๊ณ  ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ž…์ฆํ•˜๊ณ  BCM์ด ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜์žˆ๋Š” ์žฌํ˜„์„ ์–ป์„ ์ˆ˜์žˆ๋Š” ๋” ๋‚˜์€ ์‹คํ—˜์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์•ˆํƒ€๊น๊ฒŒ๋„์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งค์šฐ ์ค‘์š”ํ•œ ์‹ค๋ฆฌ์ฝ˜ ๋ ˆ๋ธŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. SCL์ด (๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ์†Œ์Šค์— ์˜ํ•ด) ๋‚ฎ๊ฒŒ ์œ ์ง€ ๋  ๋•Œ SCL ๋ถ„๋ฐฐ๊ธฐ ํด๋Ÿญ์„ ํ‹ฑํ•˜์ง€ ์•Š์•„๋„๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์‹ค๋ฆฌ์ฝ˜ ์ˆ˜์ค€์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ECO๋Š” ๊ธˆ์† ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ... ์Œ, ์ €๋ ดํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์‹ค๋ฆฌ์ฝ˜๋ณด๋‹ค ํ›จ์”ฌ ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚˜์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์‹คํ—˜์  ์ฆ๊ฑฐ๋ฅผ ํ†ตํ•ด RPi์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋…ธ์˜ˆ ์œ ํ˜•์„ ํŠน์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Broadcom์ด I2C ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์žฌ ์„ค๊ณ„ํ•˜๋„๋ก ์„ค๋“ํ•˜๋ ค๋ฉด ์žฌํ˜„ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๊ฐ™์€ ๋” ๊ฒฌ๊ณ ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฒฌ๊ณ ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋”๋ผ๋„ ์—”์ง€๋‹ˆ์–ด๋Š” ๋‹ค์Œ ๊ฐœ์ •์„ ์œ„ํ•ด ์‹ค๋ฆฌ์ฝ˜์„ ๊ฐœ์ • ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฒฝ์˜์ง„์„ ์„ค๋“ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜์—ฌ BCM ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ๋ณด๊ณ  ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์—ฌ๊ธฐ์—์„œ ๋ฐœ๊ฒฌ ํ•œ ๋‚ด์šฉ์„ Broadcom์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์›์—๊ฒŒ ์˜์กด ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์—๊ฒŒ ์ฑ„๋„์ด ์—†์Šต๋‹ˆ๋‹ค.

์‹ค๋ฆฌ์ฝ˜ ๋Œ€ ๊ธˆ์† ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ ์ด์ „ ์˜๊ฒฌ์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

SparkFun ๋˜๋Š” Adafruit์—์„œ ๋ณด๋“œ๋ฅผ ์–ป๋Š” ๊ฒฝ์šฐ, ์ข…์ข… ๊ทธ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ์ž๋ฅด๊ฑฐ๋‚˜ ๋‚ฉ๋•œ ํ•  ์ˆ˜์žˆ๋Š” ํ”์ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ I2C ๋ณด๋“œ์—๋Š” ์ฃผ์†Œ ๋ณ€๊ฒฝ, ํ’€์—… ์ €ํ•ญ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™” ๋“ฑ์„ ์œ„ํ•ด ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ํŠธ๋ ˆ์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Microchip ์„ค๊ณ„์ž๋Š” ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์นฉ์˜ ๊ธˆ์†์ธต์— ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ค๋ฆฌ์ฝ˜ ์ธต์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค๋ฆฌ์ฝ˜ ๋ ˆ์ด์–ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐ˜๋ฉด (๋ณด๋“œ์˜ ์นฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด) ๊ธˆ์† ๋ ˆ์ด์–ด๋Š” ๋ณ€๊ฒฝํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (๋ณด๋“œ์˜ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด).

์„ค๊ณ„์ž๊ฐ€ ์•ž์„œ ์ƒ๊ฐํ•˜๊ณ  ์นฉ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธˆ์† ์—ฐ๊ฒฐ (๊ธฐ๋ณธ์ ์œผ๋กœ ์ ํผ)์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ธˆ์† ๋ ˆ์ด์–ด์—์„œ ๋งŽ์€ ์œ ์šฉํ•œ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ณ„ํšํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๊ณ  ์นฉ ๋‚ด์—์„œ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋‹ค์‹œ ๋ผ์šฐํŒ…ํ•˜์—ฌ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์‹ค๋ฆฌ์ฝ˜์„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ฆฌ์ฝ˜์€ ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ณ„ํš, ๊ฒ€์ฆ ๋ฐ ๋งˆ์Šคํ‚น์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

โ€œ์ถฉ๋ถ„ํžˆ ์ข‹์€โ€์‹ค๋ฆฌ์ฝ˜ ์ธต์„ ๊ฐ€์ง„ ๋งŽ์€ ํšŒ์‚ฌ๋“ค์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์˜ค๋žซ๋™์•ˆ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์นฉ์˜ ์—ฌ๋Ÿฌ ๊ฐœ์ •ํŒ์—์„œ ์‹ค๋ฆฌ์ฝ˜ ์ธต์˜ ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด BCM์ด์žˆ๋Š” ๊ณณ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋“ค์€ ์‹ค๋ฆฌ์ฝ˜ ์ธต์˜์ด ๋ถ€๋ถ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์„ ์ •๋‹นํ™”ํ•˜๊ธฐ ์ „์— ๋“œ๋ผ์ด๋ฒ„ ๋‚˜ ๊ธˆ์†์—์„œ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ข‹์€ ์ฆ๊ฑฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์‹ค๋ฆฌ์ฝ˜์„ ์žฌ์กฐ์ • ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ทนํžˆ ๋‚ฎ์Šต๋‹ˆ๋‹ค (์˜ˆ๋น„ $ 1M์ด ์žˆ์Šต๋‹ˆ๊นŒ?). ํ•˜์ง€๋งŒ ๋ฏธ๋ž˜์˜ ์นฉ์—๋Š” ์ˆ˜์ •์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2018 ๋…„ 9 ์›” 5 ์ผ ์ˆ˜์š”์ผ 02:13:19 AM -0700์— Joel Ray Holveck์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์žฌํ˜„ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๊ฐ™์€ ๋” ํ™•์‹คํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Broadcom์ด I2C ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์žฌ ์„ค๊ณ„ํ•˜๋„๋ก ์„ค๋“ํ•˜์‹ญ์‹œ์˜ค. ์‹ฌ์ง€์–ด
ํ™•์‹คํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์—”์ง€๋‹ˆ์–ด๋Š” ๊ฒฝ์˜์ง„์—๊ฒŒ
๋‹ค์Œ ๊ฐœ์ •์„ ์œ„ํ•ด ์‹ค๋ฆฌ์ฝ˜์„ ๊ฐœ์ • ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ์ด๋ฏธ 6 ๋…„ ๋™์•ˆ 3 ๋ฒˆ์˜ ์‹ค๋ฆฌ์ฝ˜ ๊ฐœ์ •์„ํ–ˆ์Šต๋‹ˆ๋‹ค.
"๊ณ ์น˜์ง€ ์•Š์„ ๊ฒƒ"์ด๋ผ๋Š” ๊ทธ๋“ค์˜ ๊ฒฐ์ •์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค.

0.5 ์‚ฌ์ดํด ์ด์ƒ ๋Š˜์ด๋ฉด ๋ชธ๋งค๊ฐ€ ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

๋‚œ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์•„. CLK๋ฅผ ๋ฆด๋ฆฌ์Šค ํ•  ๋•Œ๋งˆ๋‹ค "์ง์ „
broadcom์ด ๋‹ค์‹œ ๋ณด์ž…๋‹ˆ๋‹ค. "์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์งง์€ ๋งฅ๋ฐ•์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
ํด๋Ÿญ ์‹ ํ˜ธ ๋ฐฉ์ถœ์„ 5 ๋งˆ์ดํฌ๋กœ ์ดˆ๋งŒํผ ์ง€์—ฐ์‹œ์ผœ
ํ•ญ์ƒ 0.5 ์‚ฌ์ดํด์„ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Wed, Sep 05, 2018 at 02:28:53 AM -0700, James Hughes๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์˜ respin์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์‹ค๋ฆฌ์ฝ˜์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค (์˜ˆ๋น„ 1 ๋ฐฑ๋งŒ ๋‹ฌ๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?). ๋ฏธ๋ž˜
์นฉ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์˜์‹ฌํ•œ๋‹ค. KNOWN ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” BCM2835์—์„œ BCM2836์œผ๋กœ
BCM2837์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฒ„๊ทธ์™€ BCM2837B0์— ๋Œ€ํ•œ ๋™์ผํ•œ ๋ฒ„๊ทธ.

์ด์ œ ๋‹ค์Œ ๊ฐœ์ •ํŒ์ด ์™œ ๋‹ค๋ฅผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

BCM์€ ๋ชฉํ‘œ ์‹œ์žฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค : ์ด๋Ÿฌํ•œ ์นฉ์„์œ„ํ•œ ํœด๋Œ€ํฐ๊ณผ TV ์Šคํ‹ฑ. ์—
๊ทธ๋“ค์˜ ๋ชฉํ‘œ ์‹œ์žฅ์€ ์•„๋ฌด๋„ ๋ฒ”์šฉ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด I2C๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AVR ๋ฐ PIC์™€ ๊ฐ™์€ ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ. ๊ทธ๋“ค์€ ์ด๊ฒƒ์„ ๊ณ ์น˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์กฐ์‚ฌ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ „์— ์ด๊ฒƒ์„ ๋‹ค๋ฃจ๋Š” ์ •์˜คํ‘œ๋ฅผ ๋ฌผ์—ˆ์„ ๋•Œ ๊ทธ๊ฒƒ์€ ํ•˜๋‚˜๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ณ€๊ฒฝ๋˜์—ˆ๊ณ  URL์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ƒ์ ์œผ๋กœ๋Š” Broadcom์ด ์˜ค๋ฅ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋„์›€์ด๋˜๋ฏ€๋กœ ํ˜ธํ™˜๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‚˜ ํ‰๊ฐ€๊ฐ€ ํ™•์‹ ์„ ๊ฐ€์ง€๊ณ  ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋ฒˆ์—ญํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ด€๋ จ HDL์˜ ์Šค ๋‹ˆํŽซ ์ •๋„๊นŒ์ง€.

ํด๋Ÿญ ํ™•์žฅ์„ ํ—ˆ์šฉ ํ•  ๋•Œ ๋ฐ˜ ๋น„ํŠธ ํด๋Ÿญ ์ œ์ˆ˜๋ฅผ ์ค‘์ง€ํ•˜๋ผ๋Š” ์ œ์•ˆ์€ ์ข‹์€ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” I2C ๋ชจ๋“ˆ์˜ ์ผ๋ถ€๊ฐ€ "์ตœ๋Œ€ ํด๋Ÿญ ์†๋„"๋กœ ์‹คํ–‰๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ I2C ๋ชจ๋“ˆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ 200kHz๋ณด๋‹ค ๋น ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์ €์ „๋ ฅ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ฃผ๋œ ์ด์œ ๋Š” ์›๋ž˜ ๊ฒŒ์‹œ๋ฌผ ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ํ˜„์žฌ RPi 3 Model B +์—์„œ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฉฐ Advamation ๊ธฐ์‚ฌ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฆฌ์ฝ˜์€ ์ตœ๊ทผ์— ์œ ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

2013 Advamation ์ž‘์„ฑ ํ›„ I2C ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ๋“œ๋ผ์ด๋ฒ„์— ์ƒ๋‹นํ•œ ๋ณ€๊ฒฝ ์ด ์žˆ์—ˆ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ์ด ๋ฒ„๊ทธ๊ฐ€์ด ๋ฒ„๊ทธ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‹คํ—˜์„ ์ ์ ˆํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ํ•˜๋“œ์›จ์–ด์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‹คํ—˜์„ ํ†ตํ•ด ๋“œ๋ผ์ด๋ฒ„์—์„œ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์‹ค์ œ๋กœ์ด ๋ฒ„๊ทธ์˜ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ BCM2837์— RPi 2์™€ ๋™์ผํ•œ I2C ๋ชจ๋“ˆ์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (์ด ๋ฌธ์ œ๊ฐ€ ์ฒ˜์Œ๋ณด๊ณ  ๋œ ์ดํ›„ I2C ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜ ์Œ์„ ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ™•์ธํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ BCM283x ์Šคํ…Œํ•‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, BCM2836 ์‹œ๋Œ€์— ๊ธˆ์† ๋ณ€ํ™”๊ฐ€์žˆ์„ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Broadcom์„ ๊ฐ•ํƒ€ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†์œผ๋ฉฐ ํ–ฅํ›„ ๊ฐœ์ •ํŒ์ด ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ ๋ ์ง€ ์ถ”์ธกํ•˜๊ฑฐ๋‚˜ ๊ทธ์™€ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚˜์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ํ˜„์žฌ ํ–‰๋™์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด ์‹คํ—˜์„ ์žฌํ˜„ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Broadcom ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ณด์กฐ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๋‚ด ์‹คํ—˜์„ ๊ฒŒ์‹œํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Š” ๋˜ํ•œ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค. ๋‚ด ์ž์‹ ์˜ ์˜ค๋งŒ ๋•Œ๋ฌธ์— ์‹คํ—˜์„ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒฝ์šฐ ์‹คํ—˜์„ ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋”์šฑ ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜์˜ ํ˜„์žฌ ์‹คํ—˜ ๊ณ„ํš์€ PIC16F1619๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹œ๊ณ„ ์ŠคํŠธ๋ ˆ์นญ ์‹คํ—˜์„ ํ•  ์ˆ˜์žˆ์„๋งŒํผ ๋น ๋ฅด๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•˜๊ณ , ์ž‘์—…ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์‰ฌ์šฐ ๋ฉฐ, ๋‹ค๋ฅธ ์‹คํ—˜์ž๋“ค์ด ๋‚ด ๊ฒฐ๊ณผ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์„๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋ชจํ˜ธํ•˜๋‹ค๋ฉด FPGA๋กœ ์‹คํ—˜์„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šฌ๋ ˆ์ด๋ธŒ๋กœ ๋น„ํŠธ ๋ฐฐ์‹ฑ ๊ตฌ์„ฑ์—์„œ ๋‹ค๋ฅธ Raspberry Pi๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ๋ฆฌ์ ์ธ ์„ธ๋ถ„์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ „์ฒด OS๊ฐ€์—†๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด :

๋‚ด ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ ์ด ๋ถˆ์™„์ „ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜๋กœ ์ดˆ์•ˆ์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋งค์šฐ ์‚ฌ์†Œํ•˜๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” SCL์ด ์™ธ๋ถ€ ์ ์œผ๋กœ ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๋Š” ๋™์•ˆ ํด๋Ÿญ ์ œ์ˆ˜๋ฅผ ์ค‘์ง€ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์— ๋Œ€ํ•ด ๋…์ฐฝ์„ฑ์„ ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฝ์—ˆ์ง€๋งŒ ์–ด๋””์— ์žˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด raspberrypi.org ์˜

I2C HW ๋ธ”๋ก์€ ๊ณ ์ • / ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ bcm2835 / 6 / 7์—์„œ๋Š” ๋„ˆ๋ฌด ๋น„์‹ธ์„œ ์นฉ์„ ๋‹ค์‹œ ํšŒ์ „ํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Advamation์ด ๋ˆ„๊ตฌ์ธ์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ RPF (T) ๊ทธ๋ฃน์—๊ฒŒ๋Š” ์‹คํ˜„๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์‚ฌ์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š” ์—ฌ๋Ÿฌ๋ถ„, Pi 2B์™€ 3์—์„œ ๋งค์šฐ ์ด์ƒํ•œ ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.
6 ์›” ๋ง์— BNO055๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ด์ „ ๋ฒ„์ „์˜ Raspbian์„ ์‚ฌ์šฉํ–ˆ๊ณ  (์ง€๊ธˆ์€ ๋ฒ„์ „์ด ์•„๋‹™๋‹ˆ๋‹ค) i2cdetect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜๋ชป๋œ I2C ์ฃผ์†Œ๋ฅผ ๋งŽ์ด ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ธํ„ฐ๋„ท์„ ์‚ดํŽด ๋ณด์•˜๊ณ  ์ข‹์€ ์ •๋ณด๊ฐ€์žˆ๋Š”์ด ํฌ๋Ÿผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์œ„์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ I2C ์ฃผํŒŒ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ชจ๋“  ๊ณ ์ŠคํŠธ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ์ž‘์—… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 8 ์›” ์ค‘์ˆœ์— Raspbian์„ raspbi-dev 4.14.62-v7 +๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๊ณ  ์‹œ์Šคํ…œ์ด ์•ฝ๊ฐ„ ๋ถˆ์•ˆ์ • ํ•ด์กŒ์ง€๋งŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ์—์„œ ์—…๋ฐ์ดํŠธ๊นŒ์ง€ ์‹œ์Šคํ…œ์ด ๋” ๋ถˆ์•ˆ์ • ํ•ด์กŒ๊ณ  sd ์นด๋“œ์—์„œ ๋ˆ„์ถœ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ NOOBS (Linux raspbi-dev 4.14.62-v7 + # 1134 SMP Tue Aug 14 17:10:10 BST 2018 armv7l)๋ฅผ ํ†ตํ•ด Raspbian์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ๊ณ  I2C ์ฃผํŒŒ์ˆ˜ ์„ค์ •์„ ์žŠ์—ˆ์ง€๋งŒ ์œ ๋ น์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ข‹์•„์š”, ์ €๋Š” ๋ฒ„์Šค์—์„œ ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  MEMS์™€ GPIO ์ต์Šคํ…๋” ๋งŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ Raspbian์˜ i2c ์ฝ”๋“œ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ์ง€ ๋œ ๋ˆ„์ถœ์€ ๋ถˆ์™„์ „ํ•œ ์—…๊ทธ๋ ˆ์ด๋“œ์—์„œ ๋น„๋กฏ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๋™์ผํ•œ ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ˆ„์ถœ์ด ๊ฐ์ง€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@ hmf2015 ์ด ๋ฌธ์ œ๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ I2C ๋ฌธ์ œ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. SD ์นด๋“œ ๋ฌธ์ œ๋Š”์ด I2C ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. SD ์นด๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ SD ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค. ์ผ๋ถ€ ์นด๋“œ๋Š” ์ข‹์ง€ ์•Š์•„ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด SD ์นด๋“œ๊ฐ€ ์ง€๋‚œ๋‹ฌ ์ž‘๋™์„ ๋ฉˆ ์ท„๊ณ  ๊ต์ฒดํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ I2C ๊ณ ์ŠคํŠธ๋Š”์ด ๋ฌธ์ œ๋กœ ์ธํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๊ฐ€์žฅ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์ข‹์€ ์ „์› ๊ณต๊ธ‰ ์žฅ์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ ํ•œ๋‹ค .
  • ์ผ€์ด๋ธ”์ด ๋„ˆ๋ฌด ๊น๋‹ˆ๋‹ค. I2C๋Š” 1m๋ณด๋‹ค ๊ธด ์ผ€์ด๋ธ”์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ผ€์ด๋ธ”์—๋Š” ์šฉ๋Ÿ‰ ์„ฑ ๊ฒฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. I2C ํ•€ (SCL ๋ฐ SDA)์ด ํ•จ๊ป˜ ๊ผฌ์ธ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์‚ฌ๋žŒ๋“ค์€ I2C ํ•€์„ ๊ผฌ์•„ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์—ฐ์„  ์ผ€์ด๋ธ” (์˜ˆ : ์ด๋”๋„ท ์ผ€์ด๋ธ”)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠธ์œ„์ŠคํŠธ ํŽ˜์–ด ์ผ€์ด๋ธ”์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ Vss (์ ‘์ง€)๋กœ SCL์„ ๋น„ํ‹€๊ณ  Vdd (3.3V)๋กœ SDA๋ฅผ ๋น„ํ‹€์‹ญ์‹œ์˜ค. ์„น์…˜ 7.5์—์„œ I2C ์‚ฌ์–‘ ์„ ํ™•์ธํ•˜์„ธ์š”.
  • I2C ์žฅ์น˜๋Š” 5V์ž…๋‹ˆ๋‹ค. Raspberry Pi๋Š” 3.3V์—์„œ I / O๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ „์••์ด ๋‹ค๋ฅด๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (BNO055๋Š” 3.3V๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ 5V๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ์ผ๋ถ€ ์žฅ์น˜๊ฐ€ ์œ ๋ น์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŽ์€ ์žฅ์น˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ์žฅ์น˜๊ฐ€ ์œ ๋ น์„ ๋งŒ๋“ค๋ฉด ์œ ๋ น์„ ๋งŽ์ด ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด "sd ์นด๋“œ์—์„œ ๋ˆ„์ถœ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค"๊ณ  ๋งํ•  ๋•Œ ๋ฌด์Šจ ๋œป์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ์ด ์›น ํŽ˜์ด์ง€์˜ ๋ฌธ์ œ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋Œ€ํ™”๋Š” ํŠน์ • ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋Š” SD ์นด๋“œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ Raspbian์ด I2C ์ž‘๋™ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Raspbian์€์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋ฅผ ๋•๊ธฐ ์œ„ํ•ด์ด ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์‹ ๋‹ค๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋„์›€์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์ด ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒฝ์šฐ Raspberry Pi ํฌ๋Ÿผ ์—์„œ ์งˆ๋ฌธ ํ•  ์ˆ˜

์ด ์ •๋ณด๋ฅผ ์•Œ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๋ณ€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ sd ์นด๋“œ ๋ฌธ์ œ๋Š” O / S์— ์˜ํ•ด ์ƒ์„ฑ๋˜์—ˆ๊ณ , ๋‚ด (Unix) ํ˜ธ์ŠคํŠธ์—์„œ ์นด๋“œ๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ ๊ดœ์ฐฎ ์•˜์œผ๋ฉฐ ์ด์ œ ๋™์ผํ•œ CAD๊ฐ€ ์ƒˆ๋กœ ์„ค์น˜ ํ•œ ํ›„์—๋„ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
I2C ๋ฒ„์Šค์˜ ์œ ๋ น์€ ๋” ๋†’์€ ์ฃผํŒŒ์ˆ˜๋กœ ์‚ฌ๋ผ์ง€๊ณ  ์ด์ œ ์žฌ์„ค์น˜ ํ›„์—๋Š” ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. R / C ๋ฌธ์ œ์™€ ๋ฐ˜์‚ฌ๋Š” ์ œ์™ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3.3V ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ตœ์†Œ 1 ๋ ˆ๋ฒจ์€ ๋” ์ ์Šต๋‹ˆ๋‹ค.
BNO055 ํŒจํ‚ค์ง€์—๋Š” ์ „์•• ๋ ˆ๊ธ€ ๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋˜ํ•œ I2C ๋ฌธ์ œ๊ฐ€ ์ด์ „๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ฐจ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Raspbian์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์กฐ์‚ฌ ํ•  ์‹œ๊ฐ„ (๋ฐ ๊ด€์‹ฌ)์ด ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์—… ํ™˜๊ฒฝ์—์„œ.
์š”์†Œ ๋ชฉ๋ก์€ ๋‚ด๊ฐ€ ๊ฒŒ์œผ ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌ ํšŒ์„ ์ด๋‚˜ USB๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๋Š” ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ BCM์ด ์ง€์›ํ•˜๋Š” Andoid ํ™˜๊ฒฝ (์‹ค์ œ Unix ์‚ฌ์šฉ)์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์กฐ๊ฑด์ด ์ €๋ณด๋‹ค ๋” ์ œํ•œ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์˜ ๋ฌธ์ œ๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š์„์ง€๋Š” ๋งํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ €๋Š” ํฌ๋งํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” hmf2015,
์ด๊ฒƒ์€ ํฌ๋Ÿผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒ„๊ทธ ์ถ”์ ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด ์ฃผ์„ ๋ชฉ๋ก์€ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด์—†๋Š” ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํฌ๋Ÿผ์ด๋‚˜ ํ—ฌํ”„ ๋ฐ์Šคํฌ์— ๋ฌธ์ œ๋ฅผ ๋…ผ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. "์•„๋งˆ๋„ ๋™์ผํ• ๊นŒ์š”? ๋‚ด ์„ค๋ช…์ด ํ•ด๋‹น ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ ๊นŒ์š”?" ๊ทธ๋Ÿฌ๋‚˜ ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด๋ณด๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด๊ด€ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.์ด ํ† ๋ก ์„ ๋” ์ด์ƒ "์˜ค์—ผ"์‹œํ‚ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋ฟก ๋นต๋€จ
์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ค๋ž˜ ์ „์— ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๋™์•ˆ I2C ์ƒํƒœ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์Šจ ๋œป์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ I2C์— ์—ฐ๊ฒฐ๋œ WM8731 ์ฝ”๋ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
2-3์ด ๋‹ค์‹œ ์‹œ์ž‘๋˜๋ฉด I2C ๋ฒ„์Šค๊ฐ€ ์™„์ „ํžˆ ๋Š๊น๋‹ˆ๋‹ค. i2cdetect๋Š” ์ฒซ ๋ฒˆ์งธ ์ค„์„ ์ œ์™ธํ•œ ์–ด๋–ค ์ •๋ณด๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ์ „ํ™”๋ฅผ ๋Š์Šต๋‹ˆ๋‹ค. ๋ณต๊ตฌํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์ „์› ๋„๊ธฐ / ์ผœ๊ธฐ์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค.
์–ธ๊ธ‰ ํ•œ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๊นŒ?
4.19 ๋ฉ”์ธ ์ปค๋„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@ sergey-suloev i2cdetect๊ฐ€ 8 ๊ฐœ ๋˜๋Š” 16 ๊ฐœ ์ฃผ์†Œ ์ดํ›„์— ์Šค์บ”์„ ๊ณ„์†ํ•˜์ง€ ์•Š์„ ๋•Œ, ์ด๊ฒƒ์ด์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์žฅ์น˜๊ฐ€ ๋‹ค์Œ ํด๋ก์ฃผ๊ธฐ๋ฅผ ์œ„ํ•ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜ ์Œ์„ ๋‚˜ํƒ€ ๋‚ด๊ธฐ ์œ„ํ•ด ํด๋ก ํ™•์žฅ์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. I2C๊ฐ€ ๊ฑฐ์˜ 40 ๋…„ ์ „์— ์„ค๊ณ„๋˜์—ˆ์„ ๋•Œ ํ•˜๋“œ์›จ์–ด ๊ตฌํ˜„์—์„œ๋„ ๊ฐ€๋Šฅํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋Š˜๋‚  ํ•˜๋“œ์›จ์–ด๋Š” 10 ๋งˆ์ดํฌ๋กœ ์ดˆ๊ฐ€ ํ•˜๋“œ์›จ์–ด์—์„œ ๊ตฌํ˜„๋˜๋Š” ์‹œ๊ฐ„์ด๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๋‹ค์Œ ํด๋Ÿญ ์‚ฌ์ดํด์„ ์ฒ˜๋ฆฌ ํ•  ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰