11个帖子/ 0新
最后一篇
arun chettoor.
离线
最后一次露面:6年2个月前
加入:2014-06-21 08:20
I2C代码

我正在使用I2C总线接口进行加速度计。加速度计的数据表坚持要在特定时间发送开始条件以获取数据。因此,在软件中,在I2C部分中的开始和停止条件是什么程序或代码是什么。是否可以知道启动条件是否已在总线上成功传输。如果是这样,我应该监控的注册。我正在使用专家开发板,并为SCL和SDA引脚使用P00和P01。谢谢!

dialog_hm.
离线
最后一次露面:5个月4周前
加入:2014-04-01 16:07
嗨arun,

嗨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)正在解决问题。

arun chettoor.
离线
最后一次露面:6年2个月前
加入:2014-06-21 08:20
嗨,谢谢你的回复。

嗨,谢谢你的回复。我使用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 chettoor.
离线
最后一次露面:6年2个月前
加入:2014-06-21 08:20
你能帮助我吗?

你能帮助我吗?

dialog_hm.
离线
最后一次露面:5个月4周前
加入:2014-04-01 16:07
你好arun,

你好arun,

我今天会检查你的信息。

您是否使用任何I2C-Protocol-Analyzer?例如Saleae或其他品牌。
然后你真的知道你的软件正在运作。

最好的问候

dialog_hm.
离线
最后一次露面:5个月4周前
加入:2014-04-01 16:07
嗨arun,

你好arun,

通过ADXL345阅读手册以下是以下内容:
* cs =高
*如果alt_address = high => 0x3a = write和0x3b =读取
*如果alt_address = low => 0xa6 = write和0xa7 =读取
*对SDA和SCL线的上拉电阻使用适当的值(例如4K7)
* adxl345 = 0xe5的ID代码。这可以读取芯片,检查协议是否有效。

最好的问候,嗯

arun chettoor.
离线
最后一次露面: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); //检测开始字节已发送或不发送

你能让我清楚这些点吗?

arun chettoor.
离线
最后一次露面:6年2个月前
加入:2014-06-21 08:20
经过输出引脚

在初始化PIN作为I2C外围设备后,通过DA14580的输出引脚进行,发现它没有提供任何信号。请给我一个测试代码以启动I2C代码的开始条件。

dialog_hm.
离线
最后一次露面:5个月4周前
加入:2014-04-01 16:07
你好arun,

你好arun,

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

HM.

arun chettoor.
离线
最后一次露面:6年2个月前
加入:2014-06-21 08:20
你好,

你好,
很高兴你得到了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”);

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

dialog_hm.
离线
最后一次露面:5个月4周前
加入:2014-04-01 16:07
你好

你好

可以使用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}

主题锁定