主题中讨论的其他器件:SysConfig
我需要一个示例工程(或使用 CCS 创建一个工程)、以便能够传输和接收直接访问无线电内核的802.1.5.4帧。
无法从 SDK 和相关文档中获取适当的详细信息。
是否有人可以指导我完成此操作? 非常感谢!
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.
我需要一个示例工程(或使用 CCS 创建一个工程)、以便能够传输和接收直接访问无线电内核的802.1.5.4帧。
无法从 SDK 和相关文档中获取适当的详细信息。
是否有人可以指导我完成此操作? 非常感谢!
Karthik、您好、
您可以使用专有射频示例作为起点(https://dev.ti.com/tirex/explore/node?node=A__AJq6yarL5-cu.k-KvHeZbA__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST )
对于 IEEE 模式、我们在此处提供了文档: https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/docs/proprietary-rf/proprietary-rf-users-guide/proprietary-rf-guide/ieee-rf-index-cc13xx_cc26xx.html
谢谢、
M·H
Karthik、您好、
我建议您使用射频驱动程序。
您可以在以下位置找到所有射频驱动器文档: https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/docs/rflib/html/index.html
此处提供了 CMD_PROP 定义(单击每个命令了解详情): https://dev.ti.com/tirex/explore/content/simplelink_cc13xx_cc26xx_sdk_7_10_00_98/docs/rflib/html/cc13x2__cc26x2_2driverlib_2rf__prop__cmd_8h.html
谢谢、
M·H
尊敬的 Marie:
设法为 IEEE Rx 模式编写示例应用。
对于 IEEE Tx 模式、无法找到用于配置通道编号的配置。
下面是代码。代码在执行 RF_runCmd 函数时崩溃。
void *mainThread (void *arg0)
{
RF_Params rfParams;
rf_params_init (&rfParams);
rfParams.NID = RF_STACK_ID_154;
GPIO_setConfig (CONFIG_GPIO_GLED、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_WRITE (CONFIG_GPIO_GLED、CONFIG_GPIO_LED_OFF);
rf_cmdIeeeTx_ieeee154p10_0.payloadLen = payload_length;
rf_cmdIeeeTx_ieeee154p10_0.pPayload =数据包;
rf_cmdIeeeTx_ieeee154p10_0.startTrigger.triggerType = trig_now;
rfHandle = rf_open ((RF_Object *)&rfObject、&RF_prop_ieeee154p10_0、(RF_RadioSetup*)&RF_cmdRadioSetup_ieee154p10_0、&rfParams);
rf_postCmd (rfHandle、(RF_Op*)和 rf_cmdfs_ieeee154p10_0、RF_PriorityNormal、NULL、0);
//设置工作通道
// RF_cmdIeeeTx_ieee154p10_0.channel = 11;
while (1)
{
/*创建具有递增序列号和随机有效负载的数据包*/
packet[0]=(uint8_t )(seqNumber >>8);
packet[1]=(uint8_t)(seqNumber++);
uint8_t i;
对于(I = 2;I < PAYLOAD_LENGTH;I++)
{
packet[i]=rand();
}
/*发送数据包*/
RF_EventMask terminationReason = RF_runCmd (rfHandle、(RF_Op*)&RF_cmdIeeeTx_ieeee154p10_0、RF_PriorityNormal、NULL、0);
GPIO_TOGGLE (CONFIG_GPIO_GLED);
/*关闭对讲机*/
rf_yield (rfHandle);
/* packet_interval us 的睡眠*/
usleep (packet_interval);
}
谢谢
卡尔蒂克
Karthik、您好、
对于通道、您需要更改 RF_cmdRadioSetup_ieeee154p10_0和 RF_cmdfs_ieee154p10_0的频率参数、并检查 SysConfig 作为参考生成的 ti_nRADIO_CONFIG.c。 您将必须在通道更改之间关闭/打开射频驱动器。
如果使用 IEEE PHY、请使用 RF_runScheduleCmd 而不是 RF_runCmd。 https://e2e.ti.com/f/1/t/1002235
此致、
瑞安
您好、Ryan、
这是结构。模型中没有频率参数、还是缺少了一些东西?
// CMD_RADIO_SETUP_PA
//预定义方案的无线电设置命令
RFC_CMD_RADIO_SETUP_PA_t RF_cmdRadioSetup_ieee154p10_0 =
{
.commandNo = 0x0802、
.status = 0x0000、
.pNextOp = 0、
.StartTime = 0x00000000、
.startTrigger.triggerType = 0x0、
.startTrigger.bEnaCmd = 0x0、
.startTrigger.triggerNo = 0x0、
.startTrigger.pastTrig = 0x0、
.condition.rule = 0x1、
.condition.nSkip = 0x0、
.mode = 0x01、
.loDivider = 0x00、
.config.frontEndMode = 0x0、
.config.biasMode = 0x1、
.config.analogCfgMode = 0x0、
.config.bNoFsPowerUp = 0x0、
.config.bSynth窄 带= 0x0、
.txPower = 0x762E、
.pRegOverrides_ieeee154p10_0、
.pRegOverrideTxStd = 0、
.pRegOverrideTx20 = 0
};
以下结构有频率参数。 如何知道要为通道12、13或14等写入的值(802.15.4通道)
// CMD_FS
//频率合成器编程命令
RFC_CMD_FS_t RF_cmdFS_ieeee154p10_0 =
{
.commandNo = 0x0803、
.status = 0x0000、
.pNextOp = 0、
.StartTime = 0x00000000、
.startTrigger.triggerType = 0x0、
.startTrigger.bEnaCmd = 0x0、
.startTrigger.triggerNo = 0x0、
.startTrigger.pastTrig = 0x0、
.condition.rule = 0x1、
.condition.nSkip = 0x0、
.frequency = 0x0965
.fractFreq = 0x0000、
.synthConf.bTxMode = 0x0、
.synthConf.refFreq = 0x0、
.__dummy0 = 0x00,
.__dummy1 = 0x00,
.__dummy2 = 0x00,
.__dummy3 = 0x0000
};
谢谢
卡尔蒂克
e2e.ti.com/.../cc1352p4_2D00_4_5F00_tx_5F00_rx_5F00_test.zip
您好、Ryan、请查看随附的内容。
Tx 和 Rx 代码(使用两个 Lauchpad 板-一个是发送器、另一个是接收器)。
每秒钟在通道11上发送一次数据。
我可以看到发送器上的绿色 LED 每1秒切换一次。
我看不到接收器上的红色 LED 切换。 在调试时、我没有看到控制切换到回调函数。
请检查代码、并告诉我是否丢失了一些内容。
谢谢
Karthik、您好、
请使用 Smart RF Studio 7 (每个接口一个 LaunchPad)测试 PropRF 代码、这意味着您应该测试具有 Smart RF Studio 接收模式的 rfPacketTx 项目和具有 Smart RF Studio 传输模式的 rfPacketRx。 基本 RX 和 TX SimpleLink Academy 实验中介绍了类似的方法。 然后、您可以确定发送器端或接收器端是否未按预期运行、之后您可以进一步确定是否存在任何不匹配的射频设置或是否 未完全遵循之前的迁移指令。
此致、
瑞安
您好、Ryan、
我使用 SmartRF (Tx 和 Rx)进行了测试、能够在接收器上看到数据包。
固件 Tx 和 SmartRF Rx。 能够在一个通道上看到数据包(此处的示例是通道#11)。
测试了数据包长度为30字节的固件 Tx 更改通道。 我无法在 SmartRF 接收器上看到适当的基于15.4的数据包。 奇怪的是、即使固件 Tx 已停止、它 SmartRF 也在通道14/通道20上捕获数据包。 已连接快照。
您能解释一下这种现象吗?
此外、如何确保 SmartRF Rx 在已配置通道上仅接收预期的数据包、而固件 Tx 在所有802.15.4通道上传输?
Ryan。
我想知道它是否是发送器代码。 正如我所提到的,固件 Tx 能够发送数据包,并且我能够在 Smart RF 接收器(在通道#11上)上看到相同的数据包。
问题是、当我在每次迭代时更改信道编号(以仿真信道跳频)并进行传输时、我无法看到在 SmartRF 接收器上正确捕获的数据包。
仅供参考:附近没有802.1.5.4器件。 因此、我仍然想知道 Smart RF 是如何处理这些数据包的。
感谢您澄清此问题(即跳频)。
之后可以使用 CMD_FS 命令更改通道。 为方便参考和了解更多具体细节、此处提供了 rflib API 的链接、其中包括RFCC26X2.h 和RF_driver。 以下是具有建议切换方法的相关 E2E 贴文:https://e2e.ti.com/f/1/t/1124734
此致、
瑞安
我建议使用调试打印 SimpleLink Academy 实验 或 Display/UART2 TI 驱动程序 (请参见 DISPLAY、 uart2echo或 rfDiagnostics 项目示例)。
此致、
瑞安
编译就没问题。
下面是初始化代码:
DISPLAY_Handle DISPLAY;
Display_Params 参数;
// display = Display_open (Display_Type_host、NULL);
Display = Display_open (Display_Type_UART、¶ms);
CCS 控制台上不打印任何内容(在 SysConfig 中显示类型为主机)。
CCS 终端上为 NONE @ 115200 Baud (当 SysConfig 中的显示类型为 UART 时)。

还有其他需要交叉检查的东西吗?
谢谢
卡尔蒂克
您是否将 SysConfig -> UART2模块的"Use Hardware"功能从"None"更改为"XDS110 UART"? 通过使用默认 LaunchPad 的 XDS110反向通道 UART 连接、该连接适用于我的系统。

请注意、我将使用不同的 LaunchPad 版本(其中一个版本仅具有2.4GHz)、但 仍然使用 rfPacketTx 示例、因此概念适用。
此致、
瑞安
与显示屏相比、您正确地认为需要使用 UART TI 驱动程序进行双向通信。 此处是 TI 驱动程序运行时 API 的链接 、供进一步查看。
尝试 uart2echo.c 示例。 更改了输入缓冲器以容纳2个字节。 无法看到来自终端的任何字节。
您更改了什么输入缓冲器? 我建议您在尝试进行更改之前按预期使用默认示例。 您还应查看我链接的 TI 驱动程序文档中提供的示例。
此致、
瑞安
默认示例工作正常。 这对我来说是不够的。 将必须编写我自己的 printf 函数以便在终端中输出/读取数据。
我更改了"input"(uart2echo.c 示例中的字符类型变量)来保持两个字符、以查看是否 捕获了在终端上键入的任何内容。
此外,无法查看 bytesRead 或 bytesWritten 变量的更新(在"Expressions"窗口中)。
谢谢
卡尔蒂克
bytesRead 和 bytesWritten 初始化没有为多个字节定义、本质上您需要 使用数组。 请考虑研究 rfDiagnostics 示例的 UART 实现(双向)。
此致、
瑞安
感谢您分享文档。 我不是在寻找命令实现。
基于 UART 的简单传输、写入终端并从终端读取。
例如、我尝试在终端上打印数据、结果成功了。 但是我仍然不明白 bytesWritten 参数。
void uart_printf (const char *格式、...)
{
va_list 参数;
va_start (args、格式);
char 缓冲器[128];
vsnprintf (buffer、sizeof (buffer)、format、args);
va_end (args);
uart_send_data ((const uint8_t *) buffer、strlen (buffer));
}
void uart_send_data (const uint8_t * data、uint32_t len)
{
size_t bytesWritten = 0;
UART2_WRITE (uart、data、len、&bytesWritten);//来自 TI 驱动程序的 UART API
}
uart_printf ("整数值:%d\r\n"、value_int);
uart_printf ("浮点值:%.2f\r\n"、value_float);
同样、我需要一个函数来处理从终端读取的数据。 在这种情况下、需要特殊处理来处理用户输入、用户可以键入正确的数据并按"Enter"键、也可以键入错误内容、输入退格以更正、然后按"Enter"键。
谢谢
卡尔蒂克
以下是适用于我的例程:
以下函数可以从终端读取数据:
void uart_read_data (void)
{
字符输入;
size_t 字节 Read;
size_t bytesWritten = 0;
uint32_t status = UART2_STATUS_SUCCESS;
while (1)
{
字节 Read = 0;
while (bytesRead =0)
{
状态= UART2_READ (UART、&INPUT、1、&bytesRead);
如果(status!= UART2_STATUS_SUCCESS)
{
/* UART2_READ()失败*/
while (1){}
}
}
UART_Rx_BUFFER[i]=输入;
如果(uart_rx_BUFFER[i] >0){
//已接收字符
如果(uart_rx_BUFFER[i]='\r'){
//回车(回车键)
UART_Rx_BUFFER[i]="\0";// null -终止缓冲区
uart_printf ("\r\n");//回显新行
中断;
}
否则为(uart_rx_BUFFER[i]="b"|| uart_rx_BUFFER[i]== 0x7F){
// Backspace 或 DEL 键
如果(I > 0){
I --;
}
}
否则为(i< uart_Buffer_size -1){
//正常字符
bytesWritten = 0;
while (bytesWritten =>= 0)
{
状态= UART2_WRITE (UART、&INPUT、1、&bytesWritten);
如果(status!= UART2_STATUS_SUCCESS)
{
/* UART2_WRITE ()失败*/
while (1){}
}
}
I++;
}
}
}
}
以下函数可输出打印到控制台:
//通过 UART 发送数据的函数
void uart_send_data (const uint8_t * data、uint32_t len)
{
size_t bytesWritten = 0;
UART2_WRITE (uart、data、len、&bytesWritten);
}
//Custom printf 函数、用于 UART 输出
void uart_printf (const char *格式、...)
{
va_list 参数;
va_start (args、格式);
char buffer [128];//根据需要调整缓冲器大小
vsnprintf (buffer、sizeof (buffer)、format、args);
va_end (args);
uart_send_data ((const uint8_t *) buffer、strlen (buffer));
}
要测试的示例:
int value_int = 42;
float value_float = 3.14;
/*创建一个处于默认读写模式阻塞的 UART */
UART2_Params_init (&uartParams);
uartParams.baudrate = 115200;
UART = UART2_OPEN (CONFIG_UART2_0、&uartParams);
如果(UART = NULL)
{
/* UART2_OPEN()失败*/
while (1){}
}
uart_printf ("Hello、这是一个 UART printf 示例!\r\n");
uart_printf ("整数值:%d\r\n"、value_int);
uart_printf ("浮点值:%.2f\r\n"、value_float);
while (1);