跳转到主要内容

I2C能在DA1469x SNC上突发读取吗?

DA1469x

4个月前

I2C能在DA1469x SNC上突发读取吗?

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

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

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

用示波器观察波形,似乎传感器侧正在向da1469x发送fifo数据。

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

我使用SDK_10.0.10.118

请告诉我。

谢谢你!

4个月前

PM_Dialog

嗨SEOF2000,

谢谢你在网上提出的问题。你能看看我们的吗DA1469x I2C传感器节点控制器模板从DA1469x支持网站的SW例子?你遵循了这个教程吗?

在da1469x_snc_i2c_template_sample_code\doc路径下有一个Readme文件。

关于爆炸,让我查一下。

谢谢,PM_Dialog

4个月前

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];

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

_SNC_RETAINED static uint32_t snc_fifo[2048] = {0};
_SNC_RETAINED static uint32_t *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_TRIG_SELECT_MASTER, hw_pdc_peri_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);
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_arry), 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.

4个月前

SEOF2000 20分

另外,I2C是否可以突发写入DA1469x SNC?

请告诉我。

谢谢你!

4个月前

PM_Dialog

嗨SEOF2000,

让我查一下,然后再回复你。

谢谢,PM_Dialog

3个月前

PM_Dialog

嗨SEOF2000,

我已经在内部对您的机票进行了升级检查。我会尽快给你回复。

谢谢,PM_Dialog

3个月前

PM_Dialog

嗨SEOF2000,

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

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

还请突出显示错误数据读取的模式。

谢谢,PM_Dialog

接受答案!

2个月前

PM_Dialog

嗨seof2000

我想让你知道,我们在Github上发布了一些代码。所有SDK10的例子和闪存驱动器都可以在这里找到:

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

谢谢,PM_Dialog

2个月前

SEOF2000 20分

你好,

谢谢你的支持。

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

谢谢你!