我正在使用I2C总线接口进行加速度计。加速度计的数据表坚持要在特定时间发送开始条件以获取数据。因此,在软件中,在I2C部分中的开始和停止条件是什么程序或代码是什么。是否可以知道启动条件是否已在总线上成功传输。如果是这样,我应该监控的注册。我正在使用专家开发板,并为SCL和SDA引脚使用P00和P01。谢谢!
嗨arun,
Q1您使用了哪些传感器?Q2您是否检查了SDK软件中的Periphiral I2C部分。
它的工作方式如下所示:
我不知道使用了哪些芯片,但如果我看看MC3410规格,以下情况应该是如下:
例如通过I2C读取XOUT(见MC3410-SPEC)。■开始■地址(= 0x4c + r / w = 0)■数据0x0d.■重启■地址(= 0x4c + r / w = 1)■数据IN0(地址= 0x0D)■数据IN1(地址= 0x0E)...通过自动增加■停止
现在我们必须将此转换为工作计划:请参阅用户手册UM-B-004
... //主要计划的一部分
#define xout0 0x0d // bit 0 ... 7数组[0]#define xout1 0x0e // bit 8 ... 15 array [1]#define地址-IIC 0x4C // IIC-Address的MC3410
unsigned char array [2];
......
i2c_eeprom_init(地址-IIC,i2c_7bit_addr,i2c_1byte_addr);i2c_eeprom_read_data(array,xout0,2);
//数据存储在阵列[0](LSB)和阵列[1](MSB)中
我希望这很清楚它是如何工作的。
关于软件的建议(在UM-B-004中使用EEPROM-DATA-READ + INFO)正在解决问题。
嗨,谢谢你的回复。我使用ADXL345作为传感器。我需要在DA1458的数据表中生成一个起始字节,并提到编写到IC_TAR将生成一个开始字节,如果设置了特殊和GC_OR_START。所以我写了这个代码:
SETWORD16(I2C_TAR_REG,0xC53); //激活重启 - 11&10位设置,0x53是传感器的7位地址。
而(getBits16(i2c_intr_stat_reg,r_start_det)== 0); //检测开始字节已发送或不发送
但是代码在上面陷入上面,部分,它无法检测到或者它不会产生起始字节。当传感器数据表说明时,我连接了一切,我只是从传感器那里得到确认。我也尝试了循环,以持续触发IC_tar,但仍然是相同的输出。
传感器需要的序列是:*开始字节*编写slaveaddr +写*阅读确认*写入REG ADDR读取*阅读确认*读取数据.//在这里有问题。在RX FIFO中没有数据如此选中,发现未生成启动字节。*阅读确认* 停止
我当前的init序列是:
setbits16(clk_per_reg,i2c_enable,1);//为i2c启用时钟setword16(i2c_enable_reg,0x0);//禁用I2C控制器setword16(i2c_con_reg,i2c_master_mode | i2c_slave_disable | i2c_restart_en);//从站被禁用setBits16(i2c_con_reg,i2c_speed,speed);//设置速度100// setbits16(i2c_con_reg,i2c_10bitaddr_master,address_mode);//自7位以来不会设置寻址模式setword16(i2c_tar_reg,gc_or_start |特殊|(dev_address&0x3ff));//将起始位和特殊位添加到1,以便发送开始到加速度计。setword16(i2c_enable_reg,0x1);//启用I2C控制器而((getword16(i2c_status_reg)&0x20)!= 0);
你能帮助我吗?
你好arun,
我今天会检查你的信息。
您是否使用任何I2C-Protocol-Analyzer?例如Saleae或其他品牌。然后你真的知道你的软件正在运作。
最好的问候
通过ADXL345阅读手册以下是以下内容:* cs =高*如果alt_address = high => 0x3a = write和0x3b =读取*如果alt_address = low => 0xa6 = write和0xa7 =读取*对SDA和SCL线的上拉电阻使用适当的值(例如4K7)* adxl345 = 0xe5的ID代码。这可以读取芯片,检查协议是否有效。
最好的问候,嗯
非常感谢你的回复。我正在读取ADXL的ID代码,并且开始字节不是发送。我给出了适当的拉动电阻,我只得到了确认。关于你写的任何东西是8位地址。因此,我首先通过在数据表中提到的(在I2C_DATA_CMD_REG上)发送此8位地址来启动代码。但这里的问题是 -* ic_tar仅包含7位和10位寻址的IC_tar。所以这里我不能在阅读和写作之前给出8位地址。所以我在这里给出了7位寻址。这是个问题吗?*在DA14580数据表中,提到,如果我们将写入IC_tar Statte,则将发送特殊(位11)和GC_OR_START(位10)。因此,在设置这些后,应提出开始字节中断。我没有得到它。这是部分 -SETWORD16(I2C_TAR_REG,0xC53); //激活重启 - 11&10位设置,0x53是传感器的7位地址。
你能让我清楚这些点吗?
在初始化PIN作为I2C外围设备后,通过DA14580的输出引脚进行,发现它没有提供任何信号。请给我一个测试代码以启动I2C代码的开始条件。
现在在DESC上有芯片(ADXL345Z)。看看我能做什么,解决你的问题。
HM.
你好,很高兴你得到了IC并为之工作。我让UART正常工作,同样地配置了I2C引脚。我通过示波器来了解任何启动信号是否发生(而SCL(高)SDA(低))。但是明确地知道它不是从配置的I2C引脚中提供任何信号。我们是否需要使用值设置I2C时钟的定时。我的意思是下面:setword16(ic_ss_scl_lcnt,0x08);setword16(ic_ss_scl_hcnt,0x06);
但是,虽然我正在运行调试器,但我知道这些行正在使代码重定向到硬件_Handler.c和部分:if((getword16(sys_stat_reg)&dbg_is_up)== dbg_is_up)__asm(“bkpt#0 \ n”);
请告诉我是否需要解锁任何寄存器值以更改这些值。
你好
可以使用I2C EEPROM驱动程序来控制其他I2C应用程序 - 芯片,非EEPROM。亚博国际官网平台网址温度传感器(SE95)示例如下所示。
***步骤1.打开SDK-软件:sdk ... \ peripheral_examples ... da14580_peripheral_setup.uvproj
***步骤2.查看:periph_setup.h:将硬件_configuration_index(。)更改为'1'。
/ *测试定义 - 选择与H / W设置匹配的配置* ---------------------------------------------------*(0)带有UART的SPI闪存*(1)I2C EEPROM与UART*(2)具有蜂鸣器和UART的正交编码器* ---------------------------------------------------* ///硬件配置<0 => SPI闪存具有UART <1 =>带UART <2 =>正交编码器,定时器和蜂鸣器与UART#define硬件_configuration_index(1)// 1 => I2C
***第3步。
添加新软件:EEPROM_TEST.C(在文件的开头)
挥发性int16_t温度;挥发性㈡
//测试外围设备SE95温度传感器//地址= 1001 a2 a1 a0 r / w => 7bitaddress = 0x48 ... 0x48 + 7 = 0x4f
i2c_eeprom_init(0x48,i2c_standard,i2c_7bit_addr,i2c_1byte_addr);
//读取内部ID号:II = I2C_EEPROM_READ_BYTE(0x05);//测试读数ID值= 0xA1
//读取温度btrd = i2c_eeprom_read_data(rd_data,0,2);
温度= 256 * RD_DATA [0] + RD_DATA [1];温度=温度/ 8;//向右移动3位
// ***
我在加速度传感器上测试了这个软件,它工作。只需做出正确的连接并填写不同的7位从地址等。
在上示例中添加以下行:
i2c_eeprom_init(0x53,i2c_standard,i2c_7bit_addr,i2c_1byte_addr);....btrd = i2c_eeprom_read_data(rd_data,29,29);//在AddRes29开始...地址57 = 29个位置
通过RD_DATA读取变量[0] ... rd_data [28]
我希望这能为您做出,读出加速度传感器。
{HM}
嗨arun,
Q1您使用了哪些传感器?
Q2您是否检查了SDK软件中的Periphiral I2C部分。
它的工作方式如下所示:
我不知道使用了哪些芯片,但如果我看看MC3410规格,
以下情况应该是如下:
例如通过I2C读取XOUT(见MC3410-SPEC)。
■开始
■地址(= 0x4c + r / w = 0)
■数据0x0d.
■重启
■地址(= 0x4c + r / w = 1)
■数据IN0(地址= 0x0D)
■数据IN1(地址= 0x0E)...通过自动增加
■停止
现在我们必须将此转换为工作计划:
请参阅用户手册UM-B-004
... //主要计划的一部分
#define xout0 0x0d // bit 0 ... 7数组[0]
#define xout1 0x0e // bit 8 ... 15 array [1]
#define地址-IIC 0x4C // IIC-Address的MC3410
unsigned char array [2];
......
i2c_eeprom_init(地址-IIC,i2c_7bit_addr,i2c_1byte_addr);
i2c_eeprom_read_data(array,xout0,2);
//数据存储在阵列[0](LSB)和阵列[1](MSB)中
......
我希望这很清楚它是如何工作的。
关于软件的建议(在UM-B-004中使用EEPROM-DATA-READ + INFO)正在解决问题。
嗨,谢谢你的回复。我使用ADXL345作为传感器。我需要在DA1458的数据表中生成一个起始字节,并提到编写到IC_TAR将生成一个开始字节,如果设置了特殊和GC_OR_START。所以我写了这个代码:
SETWORD16(I2C_TAR_REG,0xC53); //激活重启 - 11&10位设置,0x53是传感器的7位地址。
而(getBits16(i2c_intr_stat_reg,r_start_det)== 0); //检测开始字节已发送或不发送
但是代码在上面陷入上面,部分,它无法检测到或者它不会产生起始字节。当传感器数据表说明时,我连接了一切,我只是从传感器那里得到确认。我也尝试了循环,以持续触发IC_tar,但仍然是相同的输出。
传感器需要的序列是:
*开始字节
*编写slaveaddr +写
*阅读确认
*写入REG ADDR读取
*阅读确认
*读取数据.//在这里有问题。在RX FIFO中没有数据如此选中,发现未生成启动字节。
*阅读确认
* 停止
我当前的init序列是:
setbits16(clk_per_reg,i2c_enable,1);//为i2c启用时钟
setword16(i2c_enable_reg,0x0);//禁用I2C控制器
setword16(i2c_con_reg,i2c_master_mode | i2c_slave_disable | i2c_restart_en);//从站被禁用
setBits16(i2c_con_reg,i2c_speed,speed);//设置速度100
// setbits16(i2c_con_reg,i2c_10bitaddr_master,address_mode);//自7位以来不会设置寻址模式
setword16(i2c_tar_reg,gc_or_start |特殊|(dev_address&0x3ff));//将起始位和特殊位添加到1,以便发送开始到加速度计。
setword16(i2c_enable_reg,0x1);//启用I2C控制器
而((getword16(i2c_status_reg)&0x20)!= 0);
你能帮助我吗?
你好arun,
我今天会检查你的信息。
您是否使用任何I2C-Protocol-Analyzer?例如Saleae或其他品牌。
然后你真的知道你的软件正在运作。
最好的问候
你好arun,
通过ADXL345阅读手册以下是以下内容:
* cs =高
*如果alt_address = high => 0x3a = write和0x3b =读取
*如果alt_address = low => 0xa6 = write和0xa7 =读取
*对SDA和SCL线的上拉电阻使用适当的值(例如4K7)
* adxl345 = 0xe5的ID代码。这可以读取芯片,检查协议是否有效。
最好的问候,嗯
非常感谢你的回复。我正在读取ADXL的ID代码,并且开始字节不是发送。我给出了适当的拉动电阻,我只得到了确认。关于你写的任何东西是8位地址。因此,我首先通过在数据表中提到的(在I2C_DATA_CMD_REG上)发送此8位地址来启动代码。但这里的问题是 -
* ic_tar仅包含7位和10位寻址的IC_tar。所以这里我不能在阅读和写作之前给出8位地址。所以我在这里给出了7位寻址。这是个问题吗?
*在DA14580数据表中,提到,如果我们将写入IC_tar Statte,则将发送特殊(位11)和GC_OR_START(位10)。因此,在设置这些后,应提出开始字节中断。我没有得到它。这是部分 -
SETWORD16(I2C_TAR_REG,0xC53); //激活重启 - 11&10位设置,0x53是传感器的7位地址。
而(getBits16(i2c_intr_stat_reg,r_start_det)== 0); //检测开始字节已发送或不发送
你能让我清楚这些点吗?
在初始化PIN作为I2C外围设备后,通过DA14580的输出引脚进行,发现它没有提供任何信号。请给我一个测试代码以启动I2C代码的开始条件。
你好arun,
现在在DESC上有芯片(ADXL345Z)。
看看我能做什么,解决你的问题。
HM.
你好,
很高兴你得到了IC并为之工作。我让UART正常工作,同样地配置了I2C引脚。我通过示波器来了解任何启动信号是否发生(而SCL(高)SDA(低))。但是明确地知道它不是从配置的I2C引脚中提供任何信号。我们是否需要使用值设置I2C时钟的定时。我的意思是下面:
setword16(ic_ss_scl_lcnt,0x08);
setword16(ic_ss_scl_hcnt,0x06);
但是,虽然我正在运行调试器,但我知道这些行正在使代码重定向到硬件_Handler.c和部分:
if((getword16(sys_stat_reg)&dbg_is_up)== dbg_is_up)
__asm(“bkpt#0 \ n”);
请告诉我是否需要解锁任何寄存器值以更改这些值。
你好
可以使用I2C EEPROM驱动程序来控制其他I2C应用程序 - 芯片,非EEPROM。亚博国际官网平台网址温度传感器(SE95)示例如下所示。
***步骤1.打开SDK-软件:
sdk ... \ peripheral_examples ... da14580_peripheral_setup.uvproj
***步骤2.查看:periph_setup.h:
将硬件_configuration_index(。)更改为'1'。
/ *测试定义 - 选择与H / W设置匹配的配置
* ---------------------------------------------------
*(0)带有UART的SPI闪存
*(1)I2C EEPROM与UART
*(2)具有蜂鸣器和UART的正交编码器
* ---------------------------------------------------
* /
//硬件配置<0 => SPI闪存具有UART <1 =>带UART <2 =>正交编码器,定时器和蜂鸣器与UART
#define硬件_configuration_index(1)// 1 => I2C
***第3步。
添加新软件:EEPROM_TEST.C(在文件的开头)
挥发性int16_t温度;
挥发性㈡
//测试外围设备SE95温度传感器
//地址= 1001 a2 a1 a0 r / w => 7bitaddress = 0x48 ... 0x48 + 7 = 0x4f
i2c_eeprom_init(0x48,i2c_standard,i2c_7bit_addr,i2c_1byte_addr);
//读取内部ID号:
II = I2C_EEPROM_READ_BYTE(0x05);//测试读数ID值= 0xA1
//读取温度
btrd = i2c_eeprom_read_data(rd_data,0,2);
温度= 256 * RD_DATA [0] + RD_DATA [1];
温度=温度/ 8;//向右移动3位
// ***
我在加速度传感器上测试了这个软件,它工作。
只需做出正确的连接并填写不同的7位从地址等。
在上示例中添加以下行:
i2c_eeprom_init(0x53,i2c_standard,i2c_7bit_addr,i2c_1byte_addr);
....
btrd = i2c_eeprom_read_data(rd_data,29,29);//在AddRes29开始...地址57 = 29个位置
通过RD_DATA读取变量[0] ... rd_data [28]
我希望这能为您做出,读出加速度传感器。
{HM}