DA1469x
6个月前
发布的SEOF200020分 8回答说你好
我想在DA1469x + sensor环境中通过SNC读取传感器信息。
通过SNC读取2个字节是成功的。
然而,当读取传感器的fifo时,它似乎读取不正确。
(当读取一次时,它尝试从最小56字节读取到最大2800字节)
用示波器看波形,它似乎是传感器侧发送fifo数据到da1469x。
在DA1469x SNC上I2C突发读取吗?
SNC对i2c通信有什么限制吗?
有没有snc i2c突发读的例子?
我使用SDK_10.0.10.118
请让我知道。
谢谢你!
6个月前
嗨
我通过参考教程写了它。
为了通过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. |
5个月前
嗨SEOF2000,
很抱歉我回复晚了。SNC支持I2C突发读和写,提供传感器执行自动增量。
您能探测I2C信号并提供逻辑分析仪捕获吗?我们想检查当通过SNC和CM33执行的I2C突发读取期间发生了什么,以及通过代码读取的值的数据。
请同时标出错误数据读取的模式。
谢谢,PM_Dialog
4个月前
嗨seof2000
我想告诉你,我们在Github上发布了一些代码。所有的SDK10示例和flash驱动程序都可以在这里找到:
https://github.com/dialog-semiconductor/BLE_SDK10_examples
谢谢,PM_Dialog
6个月前
嗨SEOF2000,
谢谢你的在线问题。你能看看我们的吗DA1469x I2C传感器节点控制器模板来自DA1469x支持网站的例子?你按照本教程做了吗?
在da1469x_snc_i2c_template_sample_code\doc路径中有一个自述文件。
关于脉冲读数,我来检查一下。
谢谢,PM_Dialog