luckyflycat 发表于 2019-12-24 15:34:16

用8670做uart到spp透传的乱码问题

有朋友用8670做uart到spp的透传吗?我发现开启透传以后,第一包数据前有2、3个字节的乱码(uart source已经clean过),有朋友遇到过类似的问题么?

liujinhan 发表于 2019-12-24 16:54:49

配置 不要休眠 就可以。但功耗增加。

技术宅 发表于 2019-12-25 09:03:27

没遇到过,先确定问题,可以先调试下收到的UART数据。

zhaopeng2511 发表于 2019-12-25 10:15:27

试试VmDeepSleepEnable(FALSE);

zhaopeng2511 发表于 2019-12-25 10:19:57

如果一定要休眠,可以试着过滤掉乱码(一般是0),或用RTS或CTS脚来唤醒蓝牙再通信(要配置)

luckyflycat 发表于 2019-12-27 21:04:50

休眠已经disable了,我发现是SinkClaim得到的offset导致,按照文档说明,发送的数据需要copy到SinkMap得到的地址加上一个偏移量offset,这个offset由SinkClaim得到。我调试发现,如果这个offset是2,那么发送就会有2个字节的乱码。也就是说,发送内容的起始地址是SinkMap的返回值,但是我copy数据却往后推了offset个字节,所以前面出现了乱码。
      所以我有点困惑,到底要不要按照文档写的,加上这个offset?另外用StreamConnect也有同样的现象,怀疑adk底层代码也是加了offset的,那我要用透传的话,这个乱码岂不是无解了?
      所以我在想,是不是我的理解有问题?或者是忽略了哪里的设置?希望有朋友帮忙指点一二

zhaopeng2511 发表于 2019-12-28 12:50:08

luckyflycat 发表于 2019-12-27 21:04
休眠已经disable了,我发现是SinkClaim得到的offset导致,按照文档说明,发送的数据需要copy到SinkMap得到 ...

别纠结了,照着下面代码抄就好了      
void UartSendBytes(const char *s, uint16 n)
{
      Sink SinkUart = StreamUartSink();
        uint16 offset_claim = SinkClaim(SinkUart, n);

        if(SinkUart && offset_claim != 0xFFFF)
        {
                memcpy((SinkMap(SinkUart) + offset_claim), s, n);
                (void) PanicZero(SinkFlush(SinkUart, n));
        }
}

qianhng 发表于 2020-1-8 12:55:34

路过,学习了
页: [1]
查看完整版本: 用8670做uart到spp透传的乱码问题