你好
我想通过DA1469X +传感器环境中的SNC读取传感器信息。
通过SNC读取2个字节是成功的。
但是,在读取传感器的FIFO时,它似乎没有正确读取。
(在阅读一次时,它会尝试从最小56字节读取到最大2800字节)
使用示波器查看波形,看起来传感器侧将FIFO数据发送到DA1469x。
可以在DA1469x SNC上读取I2C突发吗?
SNC中的I2C通信是否有任何限制?
是否有任何SNC I2C突发读取示例?
我使用SDK_10.0.10.118.
请告诉我。
谢谢。
设备:
嗨seof2000,
谢谢你的问题在线。你能查看我们的传感器节点控制器DA1469X I2C模板SW示例来自DA1469X支持网站?你遵循这个教程吗?
在da1469x_snc_i2c_template_sample_code \ doc路径中有一个自述文件文件。
关于突发阅读,让我检查一下。
谢谢,PM_DIALOG.
你好
我是参照教程写的。
要通过SNC的I2C读取传感器的芯片ID,我验证了我使用snc_i2c_write()和snc_i2c_read()来读取芯片ID。
但是,在从传感器读取FIFO数据时,它只读取错误的值。当从示波器读取FIFO数据时,它看起来像从传感器传输数据。
另外,在未使用SNC的模式中,通过I2C通信读取传感器的FIFO数据来读取有效值。
我附上I2C格式,并在与传感器通信时当前使用的代码的一部分。
如果有什么问题,请告诉我。
/ **************************************************************************** /
_SNC_RETAINED static uint32_t cmd_arry[5] = {0};
_snc_retated静态uint32_t * p_cmd_arry =&cmd_arry [0];
_snc_retated静态uint32_t snc_rxbuf [10] = {0};
_snc_retated静态uint32_t * snc_p_rxbuf =&snc_rxbuf [0];
_snc_retated静态uint32_t snc_fifo [2048] = {0};
_snc_retated静态uint32_t * snc_p_fifo =&snc_fifo [0];
......
void init_snc(void)
{
......
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_udode_register(&cfg,ucode_ctx);
ad_snc_udode_enable(ucode_id);
ad_snc_pdc_set_pending(snc_ucode_id);
}
snc_udode_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]),0x41);
senis_assign(da(&cmd_arry [1]),0x00);
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]),0x12);
senis_assign(da(&cmd_arry [1]),0x01);
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可以在DA1469X SNC上进行写入吗?
请告诉我。
谢谢。
嗨seof2000,
让我检查一下,我会回复你。
谢谢,PM_DIALOG.
嗨seof2000,
感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请在https://www.dialog-seminile.com/support.
我们将在未来几天修复错误/优化搜索和标记。
此票据已移植:https://www.dialog-seminile.com/produ雷电竞官网登录cts/bluetooth-low-energy?post_id=11443##tab-support_tab_content.
为延迟道歉 - 我会在内部升级您的问题并在新的论坛线程尽快回复您。
谢谢,PM_DIALOG.