Giao tiếp I2C giữa 2 MCU

Phạm Thành Danh

Thành Viên PIF
em thấy ở bài I2C có nhắc tới phần MCU MSP430 có thể dung làm slave trên đường truyền I2C, vậy cho em hỏi nếu muôn nối như vậy thì phải config con MCU làm slave như thế nào ạ, với lại nếu làm như vậy thì địa chỉ của con MSP430 là bao nhiêu ạ. Em định nối 2 MCU lại với nhau mà chân SPI lại lỡ dung làm chuyện khác mất rồi :-s
 

nhokviet

Trứng gà
Phần nối dây thì P1.6 và P1.7 (MSP430g2553) của các con MCU với nhau. Hình như P1.6 là SDA còn P1.7 là SCL.

Rồi Address của Slave là do bạn cấu hình thôi (Slave: UCB0I2COA = ADDRESS; //Address là địa chỉ bạn muốn). Còn Master mún giao tiếp con nào thì UCB0I2CSA = AddressSlave; //AddressSlave là địa chỉ của Slave muốn giao tiếp

Master
Code:
void i2c_master_init(unsigned short AddressSlave)
{
    P1SEL |= BIT6 + BIT7;                    // Assign I2C pins to USCI_B0
    P1SEL2|= BIT6 + BIT7;                    // Assign I2C pins to USCI_B0
 
    UCB0CTL1 |= UCSWRST;                      // Enable SW reset
    UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;    // I2C Master, synchronous mode
    UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
    UCB0BR0 = 12;                            // fSCL = SMCLK/12 = ~100kHz
    UCB0BR1 = 0;
    UCB0I2CSA = AddressSlave;                        // Slave Address is 048h
    UCB0CTL1 &= ~UCSWRST;                    // Clear SW reset, resume operation
}
Slave
Code:
void i2c_slave_init()
{
    P1SEL |= BIT6 + BIT7;                    // Assign I2C pins to USCI_B0
    P1SEL2|= BIT6 + BIT7;                    // Assign I2C pins to USCI_B0
    UCB0CTL1 |= UCSWRST;                      // Enable SW reset
    UCB0CTL0 = UCMODE_3 + UCSYNC;            // I2C Slave, synchronous mode
    UCB0I2COA = ADDRESS;//0x48;                        // Own Address is 048h
    UCB0CTL1 &= ~UCSWRST;                    // Clear SW reset, resume operation
    UCB0I2CIE |= UCSTPIE + UCSTTIE;          // Enable STT and STP interrupt
}
 
Top