你好
我想通过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.
你好
I wrote it by referring to the tutorial.
要通过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]), 0xff);
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);
......
/* read fifo data from sensor */
/* 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(兰)NC_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,
Thanks for coming to the forums. Exciting news! We’re now in the process of moving to our new forum platform that will offer better functionality and is contained within the main Dialog website. All posts and accounts have been migrated. We’re now accepting traffic on the NEW forum only - please POST any new threads athttps://www.dialog-seminile.com/support.
我们将在未来几天修复错误/优化搜索和标记。
此票据已移植:https://www.dialog-seminile.com/produ雷电竞官网登录cts/bluetooth-low-energy?post_id=11443##tab-support_tab_content.
为延迟道歉 - 我会在内部升级您的问题并在新的论坛线程尽快回复您。
谢谢,PM_DIALOG.