完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 alexdos 于 2018-5-18 18:03 编辑
在ADV下通讯异常,报CRC错误,参数配置如下 void vSetRadioTxAdvancedWorCmd(rfc_CMD_PROP_TX_ADV_t *ptTxAdvCmd, float fWakeUpFreq) [ /* Set command to CMD_PROP_TX_ADV */ ptTxAdvCmd->commandNo = CMD_PROP_TX_ADV; /* 命令 */ ptTxAdvCmd->status = 0; /* 状态,由RF CORE来填充 */ /* 命令触发条件 */ ptTxAdvCmd->startConf.bExtTxTrig = 0; /*触发器方式,0采用时间触发,1采用外部RAT触发 */ ptTxAdvCmd->startConf.inputMode = 0; /* RAT触发边沿 */ ptTxAdvCmd->startConf.source = 0; /* RAT触发数 */ ptTxAdvCmd->startTrigger.triggerType = TRIG_NOW; /* 触发类型->立即触发 */ ptTxAdvCmd->startTrigger.bEnaCmd = 0; /* 0禁用替代触发命令 */ ptTxAdvCmd->startTrigger.triggerNo = 0; /* 替代命令触发数 */ ptTxAdvCmd->startTrigger.pastTrig = 1; /*A trigger in the past is never triggered, or for start of commands, give an error*/ ptTxAdvCmd->starttime = 0; /* 触发时间 */ /* 运行下一条命令的条件 */ ptTxAdvCmd->pNextOp = NULL; /* 当前命令完成,指向下一个命令的指针 */ ptTxAdvCmd->condition.rule = COND_NEVER; /* 运行下一条命令的条件 ->不运行*/ ptTxAdvCmd->condition.nSkip = 0; /*Number of skips + 1 if the rule involves skipping. 0: same, 1: next, 2: skip next, ...*/ /* 数据包格式设置 */ ptTxAdvCmd->pktConf.bFsOff = 0; /* 在当前命令后频率合成器状态,0打开,1关闭 */ ptTxAdvCmd->pktConf.bUseCrc = 1; /* 1,使用CRC */ ptTxAdvCmd->pktConf.bCrcIncSw = 0; /* 1,CRC包含同步字计算 */ ptTxAdvCmd->pktConf.bCrcIncHdr = 0; /* 1,CRC包含头HEAD */ ptTxAdvCmd->numHdrBits = 16; /* Head占用bit数 */ /* 从前导字到同步字转换的触发器 */ ptTxAdvCmd->preTrigger.triggerType = TRIG_REL_START; /* 相对于命令触发启动 */ ptTxAdvCmd->preTrigger.bEnaCmd = 0; /* 0不使用替代触发器 */ ptTxAdvCmd->preTrigger.triggerNo = 0; /* 触发数 */ ptTxAdvCmd->preTrigger.pastTrig = 1; ptTxAdvCmd->preTime = WOR_PREAMBLE_TIME_RAT_TICKS(fWakeUpFreq); /* 从前导转换到同步的触发时间 */ ptTxAdvCmd->pktLen = RX_MAX_LENGTH; /* 0,无限包长,长度由头部确定 */ ptTxAdvCmd->syncWord = 0xeffffffe; ptTxAdvCmd->pPkt = NULL; ] void vSetRadioRxAdvancedSniffCmd(rfc_CMD_PROP_RX_ADV_SNIFF_t *ptRxAdvSniffCmd, rfc_CMD_PROP_RADIO_DIV_SETUP_t *ptDivSetup, float fWakeUpfreq, dataQueue_t *ptQueue, rfc_propRxOutput_t *tStatistics) [ /* Calculate datarate from prescaler and rate word */ uint32_t datarate = uiCalculateSymbolRate(ptDivSetup); /* Calculate basic timing parameters */ uint32_t symbolLengthUs = 1000000UL/datarate;//发一个bit需要的时间,uS uint32_t preambleSymbols = (1000000.00/fWakeUpfreq)/symbolLengthUs; //前导的长度bit uint8_t syncWordSymbols = ptDivSetup->formatConf.nSwBits; //同步字bit uint32_t correlationPeriodUs = (syncWordSymbols + CORR_PERIOD_SYM_MARGIN)*symbolLengthUs; uint32_t csEndTimeUs = (CS_END_TIME_MIN_TIME_SYM*symbolLengthUs + CS_END_TIME_MIN_TIME_STATIC_US); uint32_t rxEndTimeUs = symbolLengthUs * (preambleSymbols + syncWordSymbols + RX_END_TIME_SYM_MARGIN); memset(ptRxAdvSniffCmd, 0x00, sizeof(rfc_CMD_PROP_RX_ADV_SNIFF_t)); ptRxAdvSniffCmd->commandNo = CMD_PROP_RX_ADV_SNIFF; /* 设置命令 */ /* 设置触发器 */ ptRxAdvSniffCmd->startTrigger.triggerType = TRIG_ABSTIME; /* 设置命令启动为绝对运行时间 */ ptRxAdvSniffCmd->startTrigger.bEnaCmd = 0; ptRxAdvSniffCmd->startTrigger.triggerNo = 0; ptRxAdvSniffCmd->startTrigger.pastTrig = 1; ptRxAdvSniffCmd->startTime = 0; /* 发送之前设置 */ /* 运行下一个命令的条件 */ ptRxAdvSniffCmd->pNextOp = NULL; /* 没有下一条命令 */ ptRxAdvSniffCmd->condition.rule = COND_NEVER; /* 运行下一条命令的条件 ->不运行*/ ptRxAdvSniffCmd->condition.nSkip = 0; /* 包设置 */ ptRxAdvSniffCmd->pktConf.bFsOff = 1; /* 在命令结束后频率合成器状态,1关闭,0打开 */ ptRxAdvSniffCmd->pktConf.bRepeatOk = 0; /* 收到正确数据后的操作,0结束,1重新接收 */ ptRxAdvSniffCmd->pktConf.bRepeatNok = 0; /* 收到错误数据后的操作,0结束,1重新接收 */ ptRxAdvSniffCmd->pktConf.bUseCrc = 1; /* 1使能CRC */ ptRxAdvSniffCmd->pktConf.bCrcIncSw = 0; /* 1CRC包含前导 */ ptRxAdvSniffCmd->pktConf.bCrcIncHdr = 0; /* 1CRC包含头HEAD */ ptRxAdvSniffCmd->pktConf.endType = 0; /* 0收到同步字后,收到结束认为收到数据包 */ ptRxAdvSniffCmd->pktConf.filterOp = 0; /* 地址过滤器,但地址不匹配时,0停止接收,1接收但标识地址错误 */ /* 接收配置 */ ptRxAdvSniffCmd->rxConf.bAutoFlushIgnored = 1; /* 自动丢弃未处理的数据包 */ ptRxAdvSniffCmd->rxConf.bAutoFlushCrcErr = 1; /* 自动清除CRC错误的数据包 */ ptRxAdvSniffCmd->rxConf.bIncludeHdr = 1; /* 1储存的数据中包含头或者长度 */ ptRxAdvSniffCmd->rxConf.bIncludeCrc = 1; /* 1储存的数据包中包含CRC */ ptRxAdvSniffCmd->rxConf.bAppendRssi = 1; /* 1接收队列中追加RSSI */ ptRxAdvSniffCmd->rxConf.bAppendTimestamp = 0; /* 1接收队列中追加时间戳 */ ptRxAdvSniffCmd->rxConf.bAppendStatus = 0; /* 1接收队列中追加状态字 */ /* 包长和HEAD设置 */ ptRxAdvSniffCmd->hdrConf.numHdrBits = 16; /*Number of bits in header (0--32)*/ ptRxAdvSniffCmd->hdrConf.lenPos = 0; /*Position of length field in header (0--31)*/ ptRxAdvSniffCmd->hdrConf.numLenBits = 16; /*Number of bits in length field (0--16)*/ ptRxAdvSniffCmd->lenOffset = -4; /* 未知用途 */ /* 地址设置 */ ptRxAdvSniffCmd->addrConf.addrType = 0; /* 0地址在头后,1地址包含在中头 */ ptRxAdvSniffCmd->addrConf.addrSize = 0; /* 当addrType=0时,地址单位为Byte,否则为bit*/ ptRxAdvSniffCmd->addrConf.addrPos = 0; /* 当addrType=0时,地址作为同步的扩展字节,否则地址在头部中的大小单位为bit*/ ptRxAdvSniffCmd->addrConf.numAddr = 0; /* 地址例表中,地址的数量 */ ptRxAdvSniffCmd->pAddr = NULL; /* 地地列表 */ /* 唤醒设置 */ ptRxAdvSniffCmd->csConf.bEnaRssi = 1; /* 1使能RSSI检测 */ ptRxAdvSniffCmd->csConf.bEnaCorr = 1; /* 1使能PQT检测 */ ptRxAdvSniffCmd->csConf.operation = 1; /* 1检查到RSSI或者PQT其中一个就认为有数据存在 */ ptRxAdvSniffCmd->csConf.busyOp = 0; /* 0信道忙时继续监听,1信道忙时停止监听*/ ptRxAdvSniffCmd->csConf.idleOp = 1; /* 1没有监听到载波结束 */ ptRxAdvSniffCmd->csConf.timeoutRes = 1; /* 信道空闲返回PROP_DONE_IDLE_TIMEOUT */ /* RSSI configuration */ ptRxAdvSniffCmd->numRssiIdle = 1; /* One idle RSSI samples signals that the channel is idle */ ptRxAdvSniffCmd->numRssiBusy = 1; /* One busy RSSI samples signals that the channel is busy */ ptRxAdvSniffCmd->rssiThr = (int8_t)RSSI_THRESHOLD_DBM; /* Set the RSSI threshold in dBm */ /* PQT configuration */ ptRxAdvSniffCmd->corrConfig.numCorrBusy = 1; /* One busy PQT samples signals that the channel is busy */ ptRxAdvSniffCmd->corrConfig.numCorrInv = 1; /* One busy PQT samples signals that the channel is busy */ ptRxAdvSniffCmd->corrPeriod = (uint16_t)(correlationPeriodUs * US_TO_RAT_TICKS);/* PQT检测时间 */ ptRxAdvSniffCmd->csEndTrigger.triggerType = TRIG_REL_START; /* 同时相对于命令触发启动 */ ptRxAdvSniffCmd->csEndTrigger.bEnaCmd = 0; ptRxAdvSniffCmd->csEndTrigger.triggerNo = 0; ptRxAdvSniffCmd->csEndTrigger.pastTrig = 1; ptRxAdvSniffCmd->csEndTime = (uint32_t)(csEndTimeUs * US_TO_RAT_TICKS); /* 结束 */ ptRxAdvSniffCmd->endTrigger.triggerType = TRIG_REL_START; ptRxAdvSniffCmd->endTime = (uint32_t)(rxEndTimeUs * US_TO_RAT_TICKS); /* 设置结束时间 */ /* Configure RX part of RX_SNIFF command */ ptRxAdvSniffCmd->syncWord0 = 0xeffffffe; /* 主同步字 */ ptRxAdvSniffCmd->syncWord1 = 0x00000000; /* 备用同步字,非0 */ ptRxAdvSniffCmd->pQueue = ptQueue; ptRxAdvSniffCmd->pOutput = (uint8_t*)tStatistics; ptRxAdvSniffCmd->maxPktLen = RX_MAX_LENGTH; ] |
|
相关推荐
3个回答
|
|
另外 ptRxAdvCmd->lenOffset = 0; /* 未知用途 */这个一参数的用途是什么,参数该如何设置
|
|
|
|
自己解决问题了,发送数据时没有重新写pktLen,写上就正确了 |
|
|
|
您好, 我现在也是碰到了这样的事情,在1Mbps传输下用TxAdv发送,接收时,把CRC屏蔽掉可以接收到数据,开启CRC就无法接收。请问您是怎么样在发送数据时重新写pktLen的?问了TI工程师,一直不给回复,希望能得到您的指教。 谢谢。 |
|
|
|
只有小组成员才能发言,加入小组>>
351 浏览 1 评论
545 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
790 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
660 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
84浏览 29评论
297浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
261浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
210浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
68浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 05:20 , Processed in 0.894032 second(s), Total 81, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号