主题: SysConfig 中讨论的其他器件
工具/软件:
您好:
我正在尝试发送和接收数据 超过 255 字节 使用的 LP-EM-CC1354P10 CMD_PROP_TX_ADV 和 CMD_PROP_RX_ADV 处于高级数据包模式。
我使用 wakeonradiTX、wakeonradiTX 示例。
我提到了这个 TI E2E 主题关于更大的数据包,但没有收到.
https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/993297/cc1312r-transmission-of-data-which-is-1000-byte-length-stops-after-4-minute/3669128?tisearch=e2e-sitesearch&keymatch=big%252525252525252520payloads#3669128
我附加了我的 发送器 和 接收器 代码片段。
您能检查一下并告诉我我出了什么问题吗?
发送器:
/***** 包括*** /
#include
/* POSIX 头文件*/
#include
#include
/* TI-RTOS 头文件*/
#include
#include
#include
#include
#include DeviceFamily_constructPath (driverlib/cpu.h)
//*板头文件*/
#include “ti_drivers_config.h"</s>“
/*射频设置*/
#include
/***** 定义*** /
/*无线电唤醒配置*/
#define WOR_wakeups_PER_second 2.
/* TX 随机有效载荷字节数*/
#define PAYLOAD_LENGTH 300
/* WOR 示例配置定义*/
#define WOR_PREAMPLE_TIME_RAT_TICKS (x)\
((uint32_t)(4000000*(1.0f/(x)))
/* TX 任务栈大小和优先级*/
#define TX_TASK_STACK_SIZE 1024
#define TX_TASK_PRIORITY 2.
/* TX 数据包有效载荷(长度+1 到时基故障长度字节)和序列号*/
静态 uint8_t packet[payload_length +2];
/*射频驱动程序对象和句柄*/
静态 RF_Object rfObject;
静态 RF_Handle rfHandle;
/* TX 信标*/
静态 sem_t txSemaphore;
/***** 函数定义*** /
/* CONFIG_GPIO_BTN1 的 GPIO 中断回调函数。 */
void buttonCallbackFunction (uint_least8_t index){
CPUdelay ((uint32_t)((48000000/3)*0.050f));
if(!GPIO_READ (INDEX)){
SEM_POST (&txSemaphore);
}
}
void *mainThread (void *arg0)
{
内部视网膜;
display_init();
GPIO_setConfig (CONFIG_GPIO_GLED、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (CONFIG_GPIO_BTN1、GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
GPIO_setCallback (CONFIG_GPIO_BTN1、buttonCallbackFunction);
GPIO_enableInt (CONFIG_GPIO_BTN1);
RETC = SEM_INIT (&txSemaphore、0、0);
如果 (retc !=0){
while (1);
}
RF_Params rfParams;
RF_Params_init (&rfParams);
RF_cmdPropTxAdv.pktLen = payload_length + 2;/*+2(对于长度字节)*/
RF_cmdPropTxAdv.ppkt =数据包;
RF_cmdPropTxAdv.Pretime = WOR_PREAMPLE_TIME_RAT_TICKS (WOR_wakeups_PER_second);
RF_cmdPropTxAdv.startTriggerType = TRIG_NOW;
RF_cmdPropTxAdv.startTrigger.pastTrig = 0x1;
RF_cmdPropTxAdv.condition.rule = 1;
RF_cmdPropTxAdv.pktConf.bUseCrc = 1;
RF_cmdPropTxAdv.pktConf.bCrcIncSw = 0;
RF_cmdPropTxAdv.pktConf.bCrcIncHdr = 0;
rfHandle = RF_open (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
RF_runCmd (rfHandle、(RF_Op*)&RF_cmdFs、RF_PriorityNormal、NULL、0);
while (1)
{
内部视网膜;
RETC = SEM_WAIT (&txSemaphore);
if (retc ==–1){
while (1);
}
Packet[0]=(uint8_t)(payload_length);
Packet[1]=(uint8_t)(payload_length >> 8);
uint16_t i;
对于 (i = 2;i < PAYLOAD_LENGTH + 2;i++)
{
Packet[i]= i;
}
RF_runCmd (rfHandle、(RF_Op*)&RF_cmdPropTxAdv、RF_PriorityNormal、NULL、0);
GPIO_TOGGLE (CONFIG_GPIO_GLED);
}
}
接收器:
/***** 包括*** /
/*标准 C 库*/
#include
/* TI 驱动程序*/
#include
#include
/* Driverlib 头文件*/
#include DeviceFamily_constructPath (driverlib/rf_prop_mailbox.h)
//*板头文件*/
#include “ti_drivers_config.h"</s>“
/*应用程序头文件*/
#include “RFQueue.h"</s>“
#include
/***** 定义*** /
#define DATA_ENTRY_HEADER_SIZE 8 /*通用数据条目的常量标头大小*/
#define MAX_LENGTH 300 /*无线电将接受的最大长度字节*/
/*如果 size_of_lenght_field = 1、则必须小于 256 */
#define NUM_DATA_ENTRY 2 /*注意:目前只支持两个数据条目*/
#define SIZE_OF_LENGTH_FIELD 2.
#define NUM_PASSIDED_BYTES 1 + SIZE_OF_LENGTH_FIELD /*数据条目数据字段将包含:
* 1 或 2 标头字节(包含长度)
* MAX_LENGTH 有效载荷字节的最大值
* 1 个状态字节 (RF_cmdPropRxAdv.rxConf.bAppendStatus = 0x1)*/
/***** 原型*** /
静态 void 回调 (RF_handle h、RF_CmdHandle ch、RF_EventMask e);
/***** 变量声明*** /
静态 RF_Object rfObject;
静态 RF_Handle rfHandle;
#elif defined (__GNUC__)
静态 uint8_t
rxDataEntryBuffer[RF_QUEUE_DATA_ENTRY_BUFFER_SIZE (NUM_DATA_ENTRY、
MAX_LENGTH、
NUM_SUPPTED_Bytes)]
__attribute__(aligned (4));
/*接收射频内核的数据队列以填充数据*/
静态 dataQueue_t dataQueue;
static RFC_dataEntryGeneral_t* currentDataEntry;
静态 uint16_t packetLength;
静态 uint8_t* packetDataPointer;
static RFC_propRxOutput_t rxStatistics;
静态 uint8_t packet[MAX_LENGTH + NUM_EXTEND_BYTE];
/***** 函数定义*** /
void *mainThread (void *arg0)
{
RF_Params rfParams;
RF_Params_init (&rfParams);
if( RFQueue_defineQueue(&dataQueue,
rxDataEntryBuffer、
sizeof (rxDataEntryBuffer)、
num_data_entries、
MAX_LENGTH + NUM_EXTENDED_BYTES)
{
/*无法为所有数据条目分配空间*/
while (1);
}
/*根据应用需求修改 CMD_PROP_RX 命令*/
/*为接收的数据设置数据实体队列*/
rf_cmdPropRxAdv.pQueue =&dataQueue;
/*丢弃 Rx 队列中忽略的数据包*/
RF_cmdPropRxAdv.rxConf.bAutoFlushIgnored = 1;
/*从 Rx 队列中丢弃带有 CRC 错误的数据包*/
RF_cmdPropRxAdv.rxConf.bAutoFlushCrcErr = 1;
/*实现数据包长度过滤以避免 PROP_ERROR_RXBUF */
RF_cmdPropRxAdv.maxPktLen = MAX_LENGTH;
RF_cmdPropRxAdv.pktConf.brepeatOk = 1;
RF_cmdPropRxAdv.pktConf.brepeatNok = 1;
RF_cmdPropRxAdv.pOutput =(uint8_t*)&rxStatistics;
RF_cmdPropRxAdv.condition.rule = 1;
RF_cmdPropRxAdv.pktConf.bUseCrc = 0x1;
RF_cmdPropRxAdv.rxConf.bIncludeHdr = 0x1;
RF_cmdPropRxAdv.rxConf.bAppendStatus = 0x1;
RF_cmdPropRxAdv.endTriggerType = 0x1;
RF_cmdPropRxAdv.pktConf.bCrcIncHdr = 0x1;
RF_cmdPropRxAdv.hdrConf.numHdrBits = 16;
RF_cmdPropRxAdv.hdrConf.numLenBits = 16;
/*请求访问对讲机*/
rfHandle = RF_open (&rfObject、&RF_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
/*设置频率*/
RF_postCmd (rfHandle、(RF_Op*)&RF_cmdFs、RF_PriorityNormal、NULL、0);
/*进入 RX 模式并在 RX 中永远保持*/
RF_EventMask terminationReason = RF_runCmd (rfHandle、(RF_Op*)&RF_cmdPropRxAdv、RF_PriorityNormal、&callback、RF_EventRxEntryDone);
while (1);
}
void 回调 (RF_handle h、RF_CmdHandle ch、RF_EventMask e)
{
IF (e & RF_EventRxEntryDone)
{
/*切换引脚以指示 RX */
GPIO_TOGGLE (CONFIG_GPIO_RLED);
/*获取当前未处理的数据条目*/
currentDataEntry = RFQueue_getDataEntry ();
packetLength =((uint16_t)(*(uint8_t*)(¤tDataEntry->data+1))<< 8)|
(uint16_t)(*(uint8_t*)(¤tDataEntry->data));
packetDataPointer =(uint8_t*)(¤tDataEntry->data + size_of_lenght_field);
/*将有效载荷和状态字节复制到数据包变量*/
memcpy (packet、packetDataPointer、(packetLength + NUM_SUPLID_Bytes - size_of_lenght_field);
}
RFQueue_nextEntry();
}

