11个职位/0个新职位
最后一篇文章
阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
I2C码

我的接口与I2C总线接口加速计。加速度计的数据表坚持需要在特定时间发送启动条件以获取数据。那么,在I2C部分中,从软件上生成启动和停止条件的程序或代码是什么呢。是否有可能知道启动条件是否已在总线上成功传输。如果是,我应该监视哪个寄存器。我使用的是专家开发板和P00和P01的scl和sda引脚。谢谢您!

对话\u-HM
离线
最后一次见到:3个月5天前
已加入:2014-04-01 16:07
你好,阿伦,

你好,阿伦,

Q1您使用了哪些传感器?
Q2您是否检查了SDK软件中的Periphiral I2C部分。

其工作方式如下:

我不知道使用了哪些芯片,但如果我看看MC3410规格,
以下情况应该是如下:

e、 g.通过I2C读取XOUT(见MC3410规范)。
■开始
■地址(= 0x4c + r / w = 0)
■数据0x0D
■重启
■地址(=0x4C+R/W=1)
■数据输入0(地址=0x0D)
■数据输入1(地址=0x0E)。。。通过自动增加
■停止

现在我们要把它转换成一个工作程序:
参见用户手册UM-B-004

…//主程序的一部分

#define xout0 0x0d // bit 0 ... 7数组[0]
#define XOUT1 0x0E//位8…15数组[1]
#define地址-IIC 0x4C // IIC-Address的MC3410

无符号字符数组[2];

i2c\ eeprom\ init(地址IIC,i2c\ U 7BIT\ U ADDR,i2c\ U 1BYTE\ U ADDR);
i2c_eeprom_read_data(array,xout0,2);

//数据存储在数组[0](LSB)和数组[1](MSB)中

我希望这是清楚的工作原理。

关于软件的建议(在UM-B-004中使用EEPROM-DATA-READ + INFO)正在解决问题。

阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
嗨,谢谢你的回复。

嗨,谢谢你的回复。我使用adxl345作为传感器。我需要生成一个起始字节,在DA1458的数据表中提到,如果设置了SPECIAL和GC\u或\u start,写入IC\u TAR将生成一个起始字节。所以我写了这个代码:

SETWORD16(I2C_TAR_REG,0xC53); //激活重启 - 11&10位设置,0x53是传感器的7位地址。

而(getBits16(i2c_intr_stat_reg,r_start_det)== 0); //检测开始字节已发送或不发送

但是代码被卡在上面的while部分,它无法检测到或者它没有产生一个起始字节。我连接了传感器数据表所说的一切,我只是从传感器得到确认。我还尝试了do while循环来连续触发IC_TAR,但仍然是相同的输出。

传感器需要的顺序是:
*开始字节
*编写slaveaddr +写
*读取确认
*写入要读取的寄存器地址
*读取确认
*读取数据.//在这里有问题。在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);//SLAVE is disabled
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 | SPECIAL |(dev_address&0x3FF));//将起始位和特殊位添加到1,用于向加速计发送开始。
setword16(i2c_enable_reg,0x1);//启用I2C控制器
while((GetWord16(I2C\u STATUS\u REG)&0x20)!= 0 );

阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
你能帮助我吗?

你能帮助我吗?

对话\u-HM
离线
最后一次见到:3个月5天前
已加入:2014-04-01 16:07
你好arun,

你好arun,

我今天会查你的信息。

您是否使用任何I2C-Protocol-Analyzer?例如Saleae或其他品牌。
那你就真的知道你的软件在工作了。

最好的问候

对话\u-HM
离线
最后一次见到:3个月5天前
已加入:2014-04-01 16:07
你好,阿伦,

你好arun,

通过ADXL345阅读手册以下是以下内容:
* cs =高
*如果ALT\u ADDRESS=high=>0x3A=write和0x3B=read
*如果ALT\u ADDRESS=low=>0xA6=write和0xA7=read
*为SDA和SCL线路的上拉电阻器使用适当的值(例如4k7)
*ADXL345的ID代码=0xE5。这可以从芯片中读出,检查协议是否工作。

最好的问候,嗯

阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
非常感谢你的邀请

非常感谢你的回复。我正在读取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); //检测开始字节已发送或不发送

你能让我清楚这些点吗?

阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
穿过输出引脚

通过对DA14580的输出引脚进行初始化后将引脚作为i2c外设,发现它没有给出任何信号。请给我一个测试代码来启动I2C代码的启动条件。

对话\u-HM
离线
最后一次见到:3个月5天前
已加入:2014-04-01 16:07
你好arun,

你好arun,

现在在DESC上有芯片(ADXL345Z)。
看看我能做什么,解决你的问题。

阿伦切托
离线
最后一次见到:6年2天前
已加入:2014-06-21 08:20
你好,

你好,
很高兴你得到了IC并为之工作。我让UART正常工作,同样地配置了I2C引脚。我通过示波器来了解任何启动信号是否发生(而SCL(高)SDA(低))。但是明确地知道它不是从配置的I2C引脚中提供任何信号。我们是否需要使用值设置I2C时钟的定时。我的意思是下面:
setword16(ic_ss_scl_lcnt,0x08);
设置字16(IC\u SS\u SCL\u HCNT,0x06);

但是,当我运行调试器时,我发现这些行使代码重定向到hardware\u handler.c和以下部分:
if((GetWord16(SYS\u STAT\u REG)&DBG\u IS\u UP)==DBG\u IS\u UP)
__asm(“BKPT#0\n”);

请告诉我是否需要解锁任何寄存器值以更改这些值。

对话\u-HM
离线
最后一次见到:3个月5天前
已加入:2014-04-01 16:07
您好!

您好!

可以使用I2C EEPROM驱动程序来控制其他I2C应用芯片(非EEPROM)。温度传感器(SE95)示例如下所示。亚博国际官网平台网址

***第一步。打开SDK软件:
sdk ... \ peripheral_examples ... da14580_peripheral_setup.uvproj

***第二步。请参阅:periph\u setup.h:
将硬件_configuration_index(。)更改为'1'。

/*测试定义-选择与硬件设置匹配的配置
*---------------------------------------------------------
*(0)带有UART的SPI闪存
*(1)I2C EEPROM与UART
*(2)带蜂鸣器和UART的正交编码器
*---------------------------------------------------------
*/
//硬件配置<0 => SPI闪存具有UART <1 =>带UART <2 =>正交编码器,定时器和蜂鸣器与UART
#定义硬件配置索引(1)//1=>I2C

***第3步。

在:eeprom\u test.c(文件开头)中添加新软件

挥发性int16_t温度;
挥发性int ii;

//测试外围设备SE95温度传感器
//地址= 1001 a2 a1 a0 r / w => 7bitaddress = 0x48 ... 0x48 + 7 = 0x4f

i2c_eeprom_init(0x48,i2c_标准,i2c_7BIT_ADDR,i2c_1BYTE_ADDR);

//读取内部ID号:
ii=i2c_eeprom_read_byte(0x05);//测试读取ID值=0xA1

//读取温度
btrd=i2c\ eeprom\读取\数据(rd\数据,0,2);

温度= 256 * RD_DATA [0] + RD_DATA [1];
temperature=temperature/8;//右移3位

// ***

我在加速度传感器上测试了这个软件,它成功了。
只需建立正确的连接并填写不同的7bit从机地址等。

在上面的示例中添加以下行:

i2c\ eeprom\ init(0x53,i2c\标准,i2c\ 7位\地址,i2c\ 1字节\地址);
....
btrd=i2c_eeprom_read_data(rd_data,29,29);//从addres29开始。。。地址57=29处

通过rd\ U数据[0]读取变量。。。rd\U数据[28]

我希望这能为您做出,读出加速度传感器。

{hm}

主题已锁定