TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3220SF 中的串口读写是否每次都有最大长度限制?

Other Parts Discussed in Thread:CC3220SF

你好,当我使用Uart_read 读取串口数据,每次读取1024个数据(实际串口只有发送了200个数据),用逻辑分析仪测得,每次CC3220SF这边接收到8个字节的数据后就会把流控拉高(CC3220SF使用了流控,当RX忙的时候会把引脚拉高),然后后面就没有传输数据了。所以我想请问下,关于UART_read与 UART_write API中的 size :

@param size The number of bytes in the buffer that should be written
* to the UART

有没有最大长度限制,即单次收发有没有上限

Viki Shi:

你的buffer设置为多大?

,

user6458813:

buff设置为1460

,

user6458813:

数据类型为unsigned char

,

user6458813:

我想通过UART来接收数据,但是数据长度不一,只能说最大不超过1024,但最小可能只有1字节。而UART_read这个API里面有规定说接收的长度,这样做的结果是,假设我接收大小设置为50字节,而前几次只发送1字节的数据,这会导致串口只有收到50字节数据才会返回,这样导致数据无法及时收到

,

Viki Shi:

建议参考下SDK里的UART例程

,

Viki Shi:

传输不定长度的数据请看如下类似问题:
e2e.ti.com/…/658252

,

user6458813:

SDK里的例程也只是设置接收固定长度的,然后查阅你发的连接里面的情况与我类似,但是工程师给出的答复是使用UART DMA来完成,但是在当前版本的uart API里已经使用了DMA。我觉得你给的连接里没有能解决我当前的问题

,

user6458813:

请问下,UART_readCancel这个API,文档里说 UART_readCancel() calls the registered RX callback function no matter how many bytes were received,意思是说如果我取消本次UART read的传输,那么这个API会调用callback函数?

,

Viki Shi:

如果调用 UART_readCancel() 时,确实有收到数据(readSize> 0)时才调用回调。 如果readSize = 0 ,则不调用回调,直接返回

,

user6458813:

那请问下,我将uart_read定义为收到50个字节就返回,然后我使用串口通过流控与CC3220SF相连,向CC3220SF发送108个字节,然后收到100个字节(2次uart_read的时)我延时20ms后启动 UART_readCancel(),;发现没有调用到回调函数,并且缓冲数组打印出来都为0;再次发送相同的数据,发现前面的8个字节跟着新发来的数据一起发送给我了,请问这是怎么回事?如果可以,请您复现一下:
很简单,找一个uart callback的demo,设置成回调模式,uart_read设置成接收50个字符,然后您可以发送108个字节,并在100个字节后使用UART_readCancel,然后再次发送相同的数据,你会发现新发送的数据头跟着上次未发送的数据,而调用UART_readCancel后并未启动回调函数

,

Viki Shi:

这个问题我需要跟driver开发工程师讨论一下,有后续会来回复

,

Viki Shi:

uart_read需要读第三次,才能获取那8个字节。
否则程序中没有正在进行中的uart_read去cancel,只调用 UART_readCancel() 不会触发回调函数。

赞(0)
未经允许不得转载:TI中文支持网 » CC3220SF 中的串口读写是否每次都有最大长度限制?
分享到: 更多 (0)