This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5438a的I2C通信问题



请问一下MSP430作为主机,通过I2C挂了三个传感器,我看到TI给的初始化代码中UCB3I2CSA = SlaveAddress;    请问一下这里的从地址是怎么写的,不是挂了三个器件,是只要写其中一个,还是?,还有一个就是他的速率是怎么算的,UCBxBR0与运行速率(100K,或400K)有什么计算公式吗,哪位仁兄有没有工程实例,参考一下,我的邮箱js_zyq@163.com,谢谢

  • 请问一下MSP430作为主机,通过I2C挂了三个传感器,我看到TI给的初始化代码中UCB3I2CSA = SlaveAddress;    请问一下这里的从地址是怎么写的,不是挂了三个器件,是只要写其中一个,还是?,还有一个就是他的速率是怎么算的,UCBxBR0与运行速率(100K,或400K)有什么计算公式吗,哪位仁兄有没有工程实例,参考一下,我的邮箱js_zyq@163.com,谢谢。

    还有一个问题就是有的程序中把UCB3I2COA = 0X48,请问一下这个主机地址0X48,是怎么得到的,手册上好像没有啊

  • 1. MSP430作为主机挂接3个I2C从设备,前提是3个从设备的地址不能一样,否者会产生访问错误。UCB3I2CSA寄存器的地址为I2C从设备地址,在你分别访问不同从设备时填入,比如传感器1-3地址为0x42, 0X46,0X48, 那么你在访问传感器1时需要写入UCB3I2CSA=0X42, 访问传感器2时写入UCB3I2CSA=0X46.

    需要注意的是MSP430设备指的I2C设备地址是7位地址,而不是8位,而有的从设备描述地址的时候是加上读写位的地址,比如24C02,一般我们说他的地址是0XA0,写入UCB3I2CSA时要写0X50。

    2. I2C的速率由UCBXCTL1寄存器的UCSSELX位以及UCBXBR0和UCBXBR1共同决定。UCBXCTL选择UCBX的时钟源,可以为UCLCKI,ACLK,SMCLK三个时钟源提供。UCBXBR0和UCBXBR1为时钟源的分频比,其中UCBXBR0为低位,UCBXBR1为高位,其值为UCBXBR1*256+USBXBR0;

    举个例子,如果你的I2C模块时钟源选择SMCLK = 4MHZ,

    1. 要得到100K速率,分频比设置为4000/100=40,USBXBR0=0x28; USBXBR1=0;

    2. 要得到400K速率,分频比设置为4000/400 = 10, USBXBR0=0X0A;USBXBR1 = 0;

  • 还有一个问题就是有的程序中把UCB3I2COA = 0X48,请问一下这个主机地址0X48,是怎么得到的,手册上好像没有啊

    UCB3I2COA寄存器用来保存本设备的I2C地址,这个地址由用户根据自己的系统写入。在设备工作在I2C从模式时,I2C主机通过该地址访问本设备。