This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC1310:使用 Mac CoP API 模型、当消息超过256字节时、仅接收到一个片段

Guru**** 2482105 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1272074/launchxl-cc1310-only-one-fragment-is-received-when-message-is-more-than-256-byts-using-mac-cop-api-model

器件型号:LAUNCHXL-CC1310

尊敬的专家:

我使用 macop 执行数据 Rx 和 TX。 在一端、我将示例收集器协处理器用作收集器;在另一个器件、我根据协处理器模型移植了传感器应用程序。

当传感器发送的数据不超过255字节时、一切都正常、但当数据长度大于256 (自定义消息)时、根据程序、数据会进行分段。 根据运行的日志,传感器成功发送所有片段,但收集器只接收第一个片段。

以下日志是在主机侧从传感器和收集器捕获的。 主机和器件使用 UART 接口、SDK 版本为 simplelink_cc13x0_sdk_4_20_02_07。  Linux 收集器来自 ti154stack_linux_x64_4_40_00_03软件包。

** 传感器日志(数据发送)*******

ApiMac_mcpsDataReq
mcpsDataReq:WR_u8:addrMode:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_u8:Addr-fill:0、0x0
mcpsDataReq:WR_U16:dstPanId:80、0x50
mcpsDataReq:WR_u8:srcAddrMode:2、0x2
mcpsDataReq:WR_u8:msduHandle:50、0x32
mcpsDataReq:WR_u8:txOptions:0、0x0
mcpsDataReq:WR_u8:通道:0、0x0
mcpsDataReq:WR_u8:功率:0、0x0
mcpsDataReq:wrBuf:keySource、len:8
mcpsDataREQ:WR_u8:securityLevel:0、0x0
mcpsDataReq:WR_u8:KeyIdMode:0、0x0
mcpsDataReq:WR_u8:KeyIndex:0、0x0
mcpsDataReq:WR_u32:includeFhIEs:0、0x0
mcpsDataReq:WR_U16:MSDU.len:242、0xf2
mcpsDataReq:WR_U16:payloadIELen:0、0x0
mcpsDataReq:wrBuf:MSDU-DATA、len:242
TX:块:1、共2个、尝试:0、共3个
TX:UART:(frag)块:2选1
UART:TX 消息(开始)[片段数据]
Frag-data msg (00b2) nbytes=255 len=250 [ 0xFE 0xfa 0xa2 0x05 0x10 0x00 0x15 0x01]
UART:TX 255字节
00000000:Fe fa A2 05 10 00 15 01-00 00 00 00 00 00 00 00 00 |.......... |
00000010:00 50 00 02 32 00 00 00-00 00 00 00 00 00 |.P..2 .......... |
00000020:00 00 00 00 00 00 00 f2-00 00 00 00 11 22 33 44 |............ "3D|
00000030:55 66 77 88 99 aa bb 08-00 45 00 E4 00 40 |UFW ... 就是…… @|
00000040:00 80 01 00 0A 0A-C9 0A 0A 0A 0A 0A 0A 0A C8 08 00 |................ |
00000050:00 06 00 06 00 78 78 78 78 78 78 78 78 78 78 |.. xxxxxxxxxxx|
00000060:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000070:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000080:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000090:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000a0:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000b0:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000c0:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000d0:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000e0:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
000000f0:78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 D2 |xxxxxxxxxxxxxx。 |
UART-wr:写入(255字节)= 255
uart:TX 消息(完整) r=255 [frag-data]
正在等待 frag-ack
事件类型 UART 写入请求! 刻度2627961
UART 接收3长度数据! 刻度2627963
UART RX:cmd0=0xe2、cmd1=0x5
UART:Rx-msg 查找启动
UART-rd:读取(5字节)= 5、5
UART:可用字节:5
00000000: Fe 03 E2 05 18 -|.. |
UART-rd:读取(3字节)= 3、8
UART:可用字节:8
00000000: Fe 03 E2 05 18 00 fc -|.. |
接收碎片整理
srsp_frag_ack msg (00b3) nbytes=8 len=3 [ 0xFE 0x03 0xe2 0x05 0x18 0x00 0xFC]
传感器处理事件:0x3
TX:块:2、共2个、尝试:0、共3个
TX:UART:(frag)块:2、共2
UART:TX 消息(开始)[片段数据]
Frag-data msg (00b2) nbytes=40 len=35 [ 0xFE 0x23 0xa2 0x05 0x10 0x01 0x15 0x01]
UART:TX 40字节
00000000:FE 23 A2 05 10 01 15 01-78 78 78 78 78 78 78 78...………………………… XXXXXXXX|
00000010:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000020:78 78 78 78 78 78 F9 -|xxxxxxx。 |
UART-wr:写入(40字节)= 40
uart:TX 消息(完整) r=40 [frag-data]
正在等待 frag-ack
UART:Rx-msg 查找启动
UART-rd:读取(5字节
ES)= 5、5
UART:可用字节:5
00000000: Fe 03 E2 05 18 -|.. |
UART-rd:读取(3字节)= 3、8
UART:可用字节:8
00000000:Fe 03 E2 05 18 01 06 fb-|.. |
接收碎片整理
srsp_frag_ack msg (00b4) nbytes=8 len=3 [ 0xFE 0x03 0xe2 0x05 0x18 0x01 0x06 0xfb]
UART 接收1长度数据! 节拍2627972
UART RX:cmd0=0x62、cmd1=0x5
UART:Rx-msg 查找启动
UART-rd:读取(5字节)= 5、5
UART:可用字节:5
00000000:FE 01 62 05 00 -|..b. |
UART-rd:读取(1字节)= 1、6
UART:可用字节:6
00000000:Fe 01 62 05 00 66 -|..b.f |
传感器处理事件:0x3
传感器处理事件:0x3
UART:TX 消息(开始)[片段状态]
Frag-status msg (00b6) nbytes=8 len=3 [ 0xFE 0x03 0xa2 0x05 0x20 0x01 0x06 0x83]
UART:TX 8字节
00000000:FE 03 A2 05 20 01 06 83-|.. ... |
UART-wr:写入(8字节)= 8
uart:TX 消息(完整) r=8 [frag-status]
Incoming-msg:Rd_u8:状态:0、0x00
SREQ:(mcpsDataREQ) SRSP:结果:0 (0x00)

** 收集器日志(数据接收)*****

UART RX:cmd0=0xC2、cmd1=0x85
UART:Rx-msg 查找启动
UART-rd:读取(5字节)= 5、5
UART:可用字节:5
00000000: Fe 03 C2 85 20 -|.. |
UART-rd:读取(3字节)= 3、8
UART:可用字节:8
00000000:FE 03 C2 85 20 00 07 63-|.. ..c |
扩展状态:块:0、已中止
areq_ext_status msg (0058) nbytes=8 len=3 [ 0xFE 0x03 0xC2 0x85 0x20 0x00 0x07 0x63]
UART 接收151个长度数据! 勾选570409
UART RX:cmd0=0xC2、cmd1=0x85
UART:Rx-msg 查找启动
UART-rd:读取(5字节)= 5、5
UART:可用字节:5
00000000: Fe 97 C2 85 10 -|.. |
UART-rd:读取(151字节)= 151,156
UART:可用字节:156
00000000:FE 97 C2 85 10 00 25 01-02 01 00 00 00 00 00 00 |…… %......... |
00000010:00 00 00 00 00 00 00 00 00 00 00 51 C3 02 00 02 00 |.......... 问: |
00000020:50 00 00 00 90 00 d6 67-00 00 00 00 00 00 00 00 |P。。。。 g.…… |
00000030:00 00 00 00 00 00 00 f2-00 00 00 00 11 22 33 44 |............ "3D|
00000040:55 66 77 88 99 aa bb 08-00 45 00 E4 00 40 |UFW ... 就是…… @|
00000050:00 80 01 00 0A 0A 0A-C9 0A 0A 0A 0A 0A 0A 0A C8 08 00 |................ |
00000060:00 06 00 06 00 78 78 78 78 78 78 78 78 78 78 |.. xxxxxxxxxxx|
00000070:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000080:78 78 78 78 78 78 78 78 78-78 78 78 78 78 78 78 78 78 78 78 | xxxxxxxxxxxx|
00000090:78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 97 |xxxxxxxxxxx. |
RX Frag:2个块中的1个、frag 大小:147
areQ_frag_data msg (0059) nbytes=156 len=151 [ 0xFE 0x97 0xC2 0x85 0x10 0x00 0x25 0x01]
UART:TX 消息(开始)[frag-ack]
Frag-ack msg (005A) nbytes=8 len=3 [ 0xFE 0x03 0xC2 0x85 0x18 0x00 0x5c]
UART:TX 8字节
00000000:FE 03 C2 85 18 00 5c-|…… \|
UART-wr:写入(8字节)= 8
uart:TX 消息(完整) r=8 [frag-ack]

问题是收集器仅接收第一个片段块(大小为147)字节、从不接收其余字节。 可能是什么原因?  非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    PS,在发送端,第一个片段为255字节,而接收端第一个片段为156字节。 我想无线协议需要进行一些重新整合、但这不是关键点、问题是接收端未收到所有完整数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deshun:

    您是在处理应用层还是 TI 15.4-Stack 中的数据碎片?

    您是否可以捕获监听器日志以查看数据包是否确实通过无线传输?

    谢谢、

    M·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marie:

    是的、数据确实是通过无线发送的。 我跟踪了代码并发现它是由以下 malloc 错误引起的。 rspLen 为0x125、pRspBuf 返回 NULL。 我是否必须在 osal_port.c 中修改堆分配函数? 即使数据被无线碎片化,dataInd()也会在接收到所有数据后被调用? 这不是我所期望的,因为我认为 dataInd()应该在数据被碎片接收时调用。 因此、将不会出现这样的 mem alloc 错误(现在也许0x125字节太大?)

    在 mT_mac.c 中

    静态空 dataInd (uint8_t indType、ApiMac_mcpsDataInd_t * Pind)

    {

    ...

      pRspBuf = map_iCall_malloc (rspLen);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从"您是在处理应用层还是 TI 15.4-Stack 中的数据分段?"开始。  

    我希望碎片整理在应用层而不是 TI 无线协议栈中进行处理。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deshun:

    我将尝试通过一些测试来重现问题。 我会尽快得到您的信息。

    此致、

    马尔文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deshun:

    似乎你可能超出了框架的容量。 您能否检查 ApiMac_STATUS_t、然后更具体地检查 ApiMac_STATUS_frameTooLong?

    此致、

    马尔文

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marvin:  

    ApiMac_STATUS_t 是一种数据结构类型、该变量在哪里定义? apiMac_status_frameTooLong。

    碎片化是通过 mT_msg.c 中的代码完成的、实际上我没有参与该过程、所以我不清楚帧的容量是多少。

    在 MT_MSG_TX()中

    /*我们是否需要碎片? */
    if (pMsg->pDestIface->len_2字节)
    {
     /*我们不需要检查碎片*/

    否则
    {
     if ((pMsg->iobuf_nvalid >256)||
     (pMsg->iobuf_nvalid >= pMsg->pDestIface->TX_frag_size)
      {
      /*是的,我们分段*/
      r = MT_MSG_TX_SCRGMENT (pMsg);
      转至完成;
     }

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Deshun:

    是的、我误解了。 您是否能够使用监听器记录传输信息?

    此致、

    马尔文