使用DA14580读取UART中的问题

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
13个帖子/ 0新
最后一篇文章
Dhrishi.
离线
最后一次见到:3年5个月前
加入:2017-02-10 09:56
使用DA14580读取UART中的问题

你好

我们的设置具有连接到UART的DA14580的外部MCU。DA14580和MCU使用我们设计的协议相互通信。
DA14580正在等待uart读取5字节头。MCU发送具有数据长度的标题(5字节)。然后,DA14580使用要接收的数据长度字节进行uart读取。
观察:
假设,MCU必须发送5个字节标题和32字节数据。
UART HW使用的内部缓冲区似乎是16个字节。因为我们所看到的是DA14580正确地接收标题,然后尝试在DA14580的UART HW缓冲区中存在于DA14580的某些部分,然后从未调用IE。32个字节永远不会完全读取。
然而,如果在从MCU接收实际数据之前调用32字节的uart读取,则整个读取成功,读取回调正确执行。

读取标题后,我们还尝试从DA14580读取一个字节。在这种情况下,会发生什么,(16 - 5)IE逐个读取11个字节。虽然,DA14580从未收到其他字节,尽管它们已被MCU发送。

似乎是DA14580 UART的问题。请你检查和恢复。
注意:我们还启用了硬件级别的流量控制,并且仍然看到这个问题。请确认硬件流量控制是否正常工作,是否使用API uart_flow_on()打开

- hrishikesh.

设备:
lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好,赫里希克什,

你好,赫里希克什,

我目前正在调查此问题,并将提供更新以解决此问题。

最好的
信用证

lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好,赫里希克什,

你好,赫里希克什,

硬件FIFO具有16个字节,并且根据标准提供1,4,8和14字节的中断。您使用的是当前的中断水平是多少?如果您在当前的中断级别遇到问题,则可以执行以下选项

禁用FIFO并正常从接收器缓冲区读取数据。这可以通过监控Rx数据可用中断和Rx超时中断来实现。这样,您将控制接收的数据量。根据报头中的长度字段,您可以读取递增到该数量的字节。

另一个选项是配置RTL中断以触发FIFO中收到的每个字节,包括接收标题(以较低的速度工作最佳(最佳)。这样,您将根据您的需求读取数据。

请像目前的波特率一样了解您的申请实施中的更多洞察力,您的RTL中断等以及如何阅读第一个标题,然后是下一个数据,这将在找出实际问题时得到很多帮助。如果您有任何顾虑,请告诉我

最好的
信用证

Dhrishi.
离线
最后一次见到:3年5个月前
加入:2017-02-10 09:56
与uart相关的问题是

解决了uart相关的问题。问题是uart流控制未启用。

我们正在调用Uart_Init()后使用UART_FLOW_ON()API
这应该记录在uart_flow_on()的SDK头文件中:需要在uart_init()生效之前调用此API。

lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好,德里希,

你好,德里希,

的顺序UART_FLOW_ON()uart_init()无论要启用硬件流控件。应该有一些其他原因可能发生这种情况。

请确认您面临的问题是否完全解决。

最好的
信用证

Dhrishi.
离线
最后一次见到:3年5个月前
加入:2017-02-10 09:56
对我们面临的问题

对我们面临的问题已经完全解决了。虽然,当我交换uart_flow_on()和uart_init()的序列时,我可以看到流控制没有生效。
无论如何,我会再试一次,如果有任何新的观察/发现,我会更新。

谢谢,
hrishikesh.

lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好,赫里希克什,

你好,赫里希克什,

很高兴听到它是解决的。如果未指定并确保在相关地点更新,我将审核它。

最好的
信用证

克克特林
离线
最后一次见到:3年12个月前
加入:2016-08-24 00:17
嗨LC,

嗨LC,

我也是从外部MCU读取的UART类似的问题。

读了这篇文章后,我尝试按照建议在uart_init()之后调用uart_flow_on()。这对我没有帮助。
我有一个UART2设置,可以以57.6Kbps的速度与外部MCU通信。从DA向外部MCU发送数据是可以的。它能够接收DA发送的所有数据。但是,当从外部MCU接收UART数据返回DA时,每个事务都有帧错误。我附上了Saleae捕获供您查看。

在捕获中,DataToQPI是从DA发送到外部MCU的数据,而DataFromQPI是从外部MCU发送到DA的数据。

非常感谢。
--凯

附件:
克克特林
离线
最后一次见到:3年12个月前
加入:2016-08-24 00:17
嗨LC,

嗨LC,

我解决了我的问题。我必须将RX引脚配置为下面的PULL_:

gpio_configurepin(gpio_uart2_rx_port,gpio_uart2_rx_pin,input_pullup,pid_uart2_rx,false);
谢谢,
--凯

克克特林
离线
最后一次见到:3年12个月前
加入:2016-08-24 00:17
嗨LC,

嗨LC,

既然RX Pull_up行就不在路上,我有一个关注的问题,读取RX行上的数据到DA缓冲区。下面是我在UART2中读取RX数据的代码:

bool readFromCIIf(字节*数据,整数数据){
布尔r=真;
短idx=0;
int nbytes=0,bytes\u left=data\u len;

而(IDX //等待1ms for FPGA以在CI UART数据寄存器中加载字节
qpispincounter(tick_1msec);

//了解到ASIC的CI输出缓冲区发送多少个字节
// khai:尝试使用ci_output_buffer_sz而不是rx_callback_size
if(bytes_left> ci_output_buffer_sz)
nbytes = ci_output_buffer_sz;
其他的
n字节=剩余字节数;

//删除将从剩余总量检索的字节
字节_left-=n字节;

//读取ASIC的字节
uart2_读取(数据+idx,N字节,空);
idx+=N字节;
}
返回r;
}

我已经玩了两个CI_输出_缓冲_SZ=256字节,而RX_回调_大小=8字节。此函数的调用方请求读取140字节。我与Saleae一起查看了RX线路,所有140字节都在所附logicdata文件中的线路上。然而,当上面的函数遍历循环进行读取时,读入缓冲区的字节与线路上的字节不同。

当我使用RX_CALLBACK_SIZE时,前16个字节看起来不错。之后,内存中的字节丢失并被跳过到下几个字节。然后,剩余的在时间点上都是0。当使用CI_OUTPUT_BUFFER_SZ时,我可能只会得到前16个字节,其余的是0。

在某种程度上,为每次读取指定读取缓冲区大小似乎很重要。要正确读取数据,这必须是什么?

谢谢,
--凯

附件:
lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好Khai,

你好Khai,

我无法在我最后重现这个问题。所以我不确定在这种情况下出错了。但是,我会提出几个建议。

1.请检查您的GPIO是否已相应分配,连接是否正确。我认为它们已正确连接,因为您可以在逻辑分析仪上看到数据。

2.我附上一个从实际驱动程序修改的示例驱动程序,以解决RX FIFO调整问题。尝试使用此驱动程序代替当前驱动程序,并检查是否解决了问题。请注意,这不是官方发布的驱动程序,仅用于测试目的。

最好的
信用证

克克特林
离线
最后一次见到:3年12个月前
加入:2016-08-24 00:17
嗨LC,

嗨LC,

在函数UART2_INIT中的新修改_UART2.c文件中(UINT16_T BAUDR,UINT8_T DLF_VALUE,UINT8_T模式),第二个参数DLF_VALUE的设置是什么?我的UART2.c文件中不需要此参数。

难道你不需要把uart2.h文件也发给我吗?
谢谢,
--凯

lc_dialog.
离线
最后一次见到:1个月3天前
工作人员
加入:2016-09-19 23:20
你好Khai,

你好Khai,

请在此处使用附加的头文件。最新版本中的UART驱动程序中几乎没有更新。

最好的
信用证

附件: