跳过主要内容

在DA1469x SNC上I2C突发读取吗?

DA1469x

6个月前

发布的SEOF200020分 8回答说
0的问题

你好
我想在DA1469x + sensor环境中通过SNC读取传感器信息。

通过SNC读取2个字节是成功的。
然而,当读取传感器的fifo时,它似乎读取不正确。
(当读取一次时,它尝试从最小56字节读取到最大2800字节)

用示波器看波形,它似乎是传感器侧发送fifo数据到da1469x。

在DA1469x SNC上I2C突发读取吗?
SNC对i2c通信有什么限制吗?
有没有snc i2c突发读的例子?

我使用SDK_10.0.10.118

请让我知道。

谢谢你!

6个月前

PM_Dialog

嗨SEOF2000,

谢谢你的在线问题。你能看看我们的吗DA1469x I2C传感器节点控制器模板来自DA1469x支持网站的例子?你按照本教程做了吗?

在da1469x_snc_i2c_template_sample_code\doc路径中有一个自述文件。

关于脉冲读数,我来检查一下。

谢谢,PM_Dialog

6个月前

SEOF2000 20分

我通过参考教程写了它。

为了通过SNC的i2c读取传感器的芯片ID,我验证了我使用了SNC_i2c_write()和SNC_i2c_read()来读取芯片ID。

然而,当从传感器读取fifo数据时,它只读取了错误的值。当从示波器读取fifo数据时,看起来数据是从传感器传输的。

此外,在不使用SNC的模式下,通过i2c通信读取传感器的fifo数据来读取一个有效值。

我附上了i2c格式和部分代码,目前使用时,与传感器通信。
如果有什么问题请让我知道。

/***************************************************************************/
_snc_retated静态uint32_t cmd_arry [5] = {0};
_SNC_RETAINED static uint32_t * p_cmd_array = & cmd_array [0];

static uint32_t snc_rxbuf[10] = {0};
*snc_p_rxbuf = &snc_rxbuf[0];

_SNC_RETAINED static uint32_t snc_fifo[2048] = {0};
*snc_p_fifo = &snc_fifo[0];

......

空白init_snc(空白)

......
cfg。pdc_evt_pr = AD_SNC_PDC_EVT_PR_0;
cfg。ucode_pr = AD_SNC_UCODE_PR_1;
cfg。cb = _snc_read_cb;

cfg。hw_pdc_entry = HW_PDC_LUT_ENTRY_VAL(HW_PDC_TRIG_SELECT_MASTER, hw_pdc_pher_trig_id_masteronly, HW_PDC_TRIG_SELECT_MASTER, hw_pdc_pher_trig_id_masteronly);
HW_PDC_MASTER_SNC,
Hw_pdc_lut_entry_en_xtal | hw_pdc_lut_entry_en_com |
hw_pdc_lut_entry_en_per |hw_pdc_lut_entry_en_tmr);

UCode_CTX = SNC_UCODE_CTX(UCODE_SNC_COLLECT_SAMPLES);
ucode_snc_init ();
Ucode_id = ad_snc_ucode_register(&cfg, ucode_ctx);
ad_snc_ucode_enable (ucode_id);

ad_snc_pdc_set_pending (snc_ucode_id);

SNC_UCODE_BLOCK_DEF (ucode_snc_collect_samples) {
......

/*从传感器读取芯片id */
/ * write addr,idexs * /
SENIS_assign (da (&p_cmd_arry) &cmd_arry [0]);
SNC_i2c_open (I2C_DEV);
SENIS_assign (da (&cmd_arry [0]), 0 x41);
SENIS_assign (da (&cmd_arry [1]), 0 x00);
senis_assign(da(&cmd_arry [2]),0xff);
snc_mutex_lock(&snc_mutex);
SNC_i2c_write(I2C_DEV, ia(& p_cmd_array), 3, SNC_HW_I2C_FLAG_ADD_STOP);
SNC_MUTEX_UNLOCK (&snc_mutex);
snc_i2c_close(i2c_dev);
SENIS_del_ms (wait_delay);

/*读取芯片id */
SENIS_assign (da (&snc_p_rxbuf) &snc_rxbuf [0]);
SNC_i2c_open (I2C_DEV);
snc_mutex_lock(&snc_mutex);
SNC_i2c_read(I2C_DEV, ia(&snc_p_rxbuf), 2, SNC_HW_I2C_FLAG_ADD_STOP);
SNC_MUTEX_UNLOCK (&snc_mutex);
snc_i2c_close(i2c_dev);

......

/ *从传感器读取FIFO数据* /
/ * write addr,idexs * /
SENIS_assign (da (&p_cmd_arry) &cmd_arry [0]);
SNC_i2c_open (I2C_DEV);
SENIS_assign (da (&cmd_arry [0]), 0 x12);
SENIS_assign (da (&cmd_arry [1]), 0 x01);
snc_mutex_lock(&snc_mutex);
SNC_i2c_write(I2C_DEV, ia(& p_cmd_array), 2, SNC_HW_I2C_FLAG_ADD_STOP);
SNC_MUTEX_UNLOCK (&snc_mutex);
snc_i2c_close(i2c_dev);
SENIS_del_ms (wait_delay);

/*读取芯片id */
SENIS_assign (da (&snc_p_fifo) &snc_fifo [0]);
SNC_i2c_open (I2C_DEV);
snc_mutex_lock(&snc_mutex);
snc_i2c_read(i2c_dev,ia(&snc_p_fifo),da(&len),snc_hw_i2c_flag_add_stop);// len == 56〜2700
SNC_MUTEX_UNLOCK (&snc_mutex);
snc_i2c_close(i2c_dev);

......

/*从SNC获取rx, fifo数据*/
void get_snc_data(uint32_t * rxbuf,uint32_t * fifo)

snc_mutex_SNC_lock (&snc_mutex);
memcpy (rxbuf snc_rxbuf, sizeof (snc_rxbuf));
Memcpy (fifo, snc_fifo, sizeof(uint32_t) * len);// len == 56~2700
snc_mutex_SNC_unlock (&snc_mutex);

/***************************************************************************/

谢谢你!

附件 大小
i2c_format.zip 538.3 KB.

6个月前

SEOF2000 20分

另外,I2C能在DA1469x SNC上突发写入吗?

请让我知道。

谢谢你!

6个月前

PM_Dialog

嗨SEOF2000,

让我查一下,然后给你答复。

谢谢,PM_Dialog

6个月前

PM_Dialog

嗨SEOF2000,

我已经在内部升级了你的机票。我会尽快回复你的。

谢谢,PM_Dialog

5个月前

PM_Dialog

嗨SEOF2000,

很抱歉我回复晚了。SNC支持I2C突发读和写,提供传感器执行自动增量。

您能探测I2C信号并提供逻辑分析仪捕获吗?我们想检查当通过SNC和CM33执行的I2C突发读取期间发生了什么,以及通过代码读取的值的数据。

请同时标出错误数据读取的模式。

谢谢,PM_Dialog

接受答案!

4个月前

PM_Dialog

嗨seof2000

我想告诉你,我们在Github上发布了一些代码。所有的SDK10示例和flash驱动程序都可以在这里找到:

https://github.com/dialog-semiconductor/BLE_SDK10_examples

谢谢,PM_Dialog

4个月前

SEOF2000 20分

你好,

谢谢你的支持。

认为此问题已发生,因为我们的传感器初始化过程不是正常执行的。

谢谢你!