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ํ์ง ์์ ๋ "์ค๋ฅ ๊ฒฝ๋ก"์์๋ง ๋ฐ์ํฉ๋๋ค. ์ ์ก์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ์์๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ์ก์ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํธ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ด ์ํํธ์จ์ด ์์ ์ ๋๋ผ์ด๋ฒ์ ์ํฉ๋๊น? ์. ๋ฒ๊ทธ๊ฐ์๋ ํ๋์จ์ด ์ฉ ๋๋ผ์ด๋ฒ์ ๋๋ค. ์ด ๋ฒ๊ทธ๊ฐ์๋ ํ๋์จ์ด๊ฐ ์ต์ ์ ๋คํด ์๋ํ๋๋กํ๋ ๊ฒ์ ๋๋ผ์ด๋ฒ์ ์๋ฌด์ ๋๋ค.
๋๋ผ์ด๋ฒ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ ๋ ์ ์๋ํ๋๋ก ๋ง๋๋ ๊ฒฝ์ฐ ํฌํจ๋์ด์ผํฉ๋๋ค.
์ ์ ํ ํจ์น๊ฐ ์์ต๋๊น?
์๋, ์์ง.
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์ ๊ฒฝ์ฐ 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์ ๋ํ ๋ฐ์ดํฐ ์ํธ ์ฌ์ ์!)
์ค, ๊ทธ๊ฒ ์ด๋์์ ์๋์ง!
๋๋ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด์์ I2C๋ก ์ ์ดํ๋ ค๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์์งํ ํฌ๊ธฐํ๊ณ ๋น๊ธ ๋ณด๋๋ก ์ ํํ๊ฑฐ๋ Pi๊ฐ SPI๋ฅผ ํตํด FPGA์ ๋ํํ๋ ๊ฒ๊ณผ I2C ์์ ์ ์ํํ๋ ๊ฒ์ ๊ฐ๊น์ต๋๋ค. .
๋๋ ๊ทธ๊ฒ์ ํ ์ ์์ด์ผ ํ ์ฐํธ๋ฌผ์ ๊ฒ์ํ์ด ์์ต๋๋ค (์์ ๋ฐฐ์ก : ๋ด์ผ). SPI ์ปค๋ฅํฐ, I2C ์ปค๋ฅํฐ. ๊ทธ ๋ณด๋๋ก ์๋ํ๋ ์ข์ ํ๋ก์ ํธ๊ฐ ๋ ๊ฒ์ ๋๋ค. ์ ๋ณด๋ฅผ ๊ณ์ ๋ฐ์ผ๋ ค๋ฉด ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์.
ํ์ฌ ์ํฉ : ์ ๋ Gert์ ํธํ๋๋ ํ๋์๋ณด๊ณ ์์ต๋๋ค. ์ฌ๋ ์ด๋ธ๊ฐ ATMEGA ์ผ ๋ "์ฒซ ๋ฒ์งธ ์ฃผ๊ธฐ๋ง ์๋ชป ๋ ์ ์์ต๋๋ค", ๊ทธ๋ฆฌ๊ณ ์ฌ๋ ์ด๋ธ๊ฐ ์ ATTINY ์ค ํ๋ ์ผ ๋ ๋ฒ๊ทธ๊ฐ ์จ์ ํ ๋ณด์ด๋ ๊ฒ์ ๋๋ค.
ํ
์คํธ ํ ์ง์ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ํ
์คํธ ์ธ์
๋์ ๊ด์ฐฐ ๋ ๊ฐ์ฅ ์งง์ SCL ํ์ค๋ 4.5 ๋ง์ดํฌ๋ก ์ด์์ต๋๋ค.
์ด์ attiny ์ฌ๋ ์ด๋ธ๋ก ํ
์คํธ ํ ACK์ ๋ํด ํ
์คํธ ๋ ์ง์ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ต์ ํ์ค ํญ์ 41ns (๋ด ์ธก์ ํด์๋)์
๋๋ค.
์. ๊ทธ๊ฒ์ ๋ฐ๊ฒฌ! ๋ฐ์ดํธ์ 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์ 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 ๊ณ ์คํธ๋์ด ๋ฌธ์ ๋ก ์ธํ ๊ฒ์ด ์๋๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ฅ ์์ฃผ ๋ฐ์ํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ํน์ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๋ค๊ณ ๋งํ์ต๋๋ค. ์ด ๋ฌธ์ ๋ก ์ธํด ์ผ๋ถ ์ฅ์น๊ฐ ์ ๋ น์ ๋ง๋ค ์ ์์ง๋ง ๋ง์ ์ฅ์น๋ ์๋๋๋ค. ์ด ๋ฌธ์ ๋ก ์ธํด ์ฅ์น๊ฐ ์ ๋ น์ ๋ง๋ค๋ฉด ์ ๋ น์ ๋ง์ด ๋ง๋ค์ง ์์ต๋๋ค. ๋๋ ๋น์ ์ ๋ฌธ์ ๊ฐ ๋ค๋ฅด๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋น์ ์ด "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 ๋ง์ดํฌ๋ก ์ด๊ฐ ํ๋์จ์ด์์ ๊ตฌํ๋๋ ์๊ฐ์ด๋๊ธฐ ๋๋ฌธ์ ํญ์ ๋ค์ ํด๋ญ ์ฌ์ดํด์ ์ฒ๋ฆฌ ํ ์ค๋น๊ฐ๋์ด ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ hmf2015,
์ด๊ฒ์ ํฌ๋ผ์ด ์๋๋๋ค. ์ด๊ฒ์ ๋ฒ๊ทธ ์ถ์ ๊ธฐ์ ๋๋ค. ์ด ์ฃผ์ ๋ชฉ๋ก์ ๋ฌธ์ ์ ๊ด๋ จ์ด์๋ ๋ฒ๊ทธ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ์ ์ ํ ํฌ๋ผ์ด๋ ํฌํ ๋ฐ์คํฌ์ ๋ฌธ์ ๋ฅผ ๋ ผ์ํ์ญ์์ค. ๋ค์ ํ ๋ฒ ๊ทํ์ ์ง๋ฌธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. "์๋ง๋ ๋์ผํ ๊น์? ๋ด ์ค๋ช ์ด ํด๋น ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ๊น์?" ๊ทธ๋ฌ๋ ์ง๊ธ ์ฐ๋ฆฌ๋ ๋น์ ์ด๋ณด๊ณ ์๋ ๊ฒ์ด ๋ฌด๊ดํ๋ค๋ ๊ฒ์ ํ์คํ ์๊ณ ์์ต๋๋ค.์ด ํ ๋ก ์ ๋ ์ด์ "์ค์ผ"์ํค์ง ๋ง์ญ์์ค.