你好
我想读通过SNC在DA1469x +传感器环境传感器信息。
通过SNC读2个字节是成功的。
然而,读取传感器的FIFO时,它似乎并不正确读取。
(当读取一次,它试图从最小56个字节读出到最大2800个字节)
看着用示波器波形,看来传感器侧在发送FIFO数据到da1469x。
可在I2C突发读取的DA1469x SNC?
是否有SNC在I2C通信的任何限制?
是否有任何SNC I2C突发读取的例子吗?
我使用SDK_10.0.10.118
请告诉我。
谢谢。
设备:
嗨seof2000,
谢谢你的问题在线。能否请您查看我们的DA1469x I2C模板传感器节点控制器从DA1469x支持网站SW实例?你按照这个教程?
有在da1469x_snc_i2c_template_sample_code \ DOC路径的自述文件。
关于突发读取,让我检查一下。
谢谢,PM_DIALOG.
嗨
我是参照教程写的。
读取通过SNC的I2C传感器的芯片ID,我已验证我使用SNC_i2c_write()和SNC_i2c_read()读取芯片ID。
但是,从传感器读取FIFO数据时,它仅读出错误的值。当FIFO数据从示波器读取,它看起来像被从传感器传输的数据。
另外,在其中不使用SNC的模式,有效的值是由读取传感器读取的FIFO通过I2C通信数据。
附上与传感器进行通信时当前使用代码的I2C格式和部分。
请让我知道,如果有什么不妥。
/ **************************************************************************** /
_SNC_RETAINED static uint32_t cmd_arry[5] = {0};
_SNC_RETAINED静态uint32_t的* p_cmd_arry =&cmd_arry [0];
_SNC_RETAINED静态uint32_t的snc_rxbuf [10] = {0};
_SNC_RETAINED静态uint32_t的* snc_p_rxbuf =&snc_rxbuf [0];
_SNC_RETAINED静态uint32_t的snc_fifo [2048] = {0};
_SNC_RETAINED静态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.pdc_entry = HW_PDC_LUT_ENTRY_VAL(HW_PDC_TRIG_SELECT_MASTER,HW_PDC_PERIPH_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×41);
SENIS_assign(DA(cmd_arry&[1]),0×00);
SENIS_assign (da (&cmd_arry [2]), 0 xff);
SNC_MUTEX_LOCK (&snc_mutex);
SNC_i2c_write(I2C_DEV,IA(&p_cmd_arry),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×12);
SENIS_assign(DA(cmd_arry&[1]),0×01);
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);
......
}
/ *获取RX,从FIFO数据SNC * /
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点射DA1469x SNC写?
请告诉我。
谢谢。
嗨seof2000,
让我检查一下,我会回来给你。
谢谢,PM_DIALOG.
嗨seof2000,
感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请在https://www.dialog-seminile.com/support.
我们将修复bug /优化搜索和标记在未来的日子里。
这张票已经被移植于://www.wsdof.com/雷电竞官网登录products/bluetooth-low-energy?post_id=11443#tab-support_tab_content
对于延迟道歉 - 我的新论坛线程上尽快升级您的内部问题,并为您作出回复。
谢谢,PM_DIALOG.