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/LP-CC2652RB:UART echo FATSD 合并代码不起作用

Guru**** 2577385 points
Other Parts Discussed in Thread: SYSCONFIG, CC2652RB

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/946046/ccs-lp-cc2652rb-uart-echo-fatsd-merged-code-not-working

器件型号:LP-CC2652RB
Thread 中讨论的其他器件:SysConfigCC2652RB

工具/软件:Code Composer Studio

大家好、我正在尝试合并 uartecho 和 fatsd no RTOS 代码以通过 UART 接收 Arduino 数据、并将其保存到连接到 CC2652RB Launchpad 的 SD 卡中。 这些代码分别适用于我的 Launchpad、即我能够通过 Arduino 接收数据、并使用 FTDI 驱动程序在串行端口上查看数据、我还能够使用 Launchpad 向 SD 卡写入虚拟文本。 但是、由于我需要同时执行这两个操作、我尝试合并这两个操作、但在合并它们时、所有函数都不起作用。 我已将我的代码附加到文件中。 此外、我还根据 both.e2e.ti.com/.../UARTECHO-FATSD-MERGED.txt 配置了 SysConfig 文件  

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

    您好、Shivam、

    我已经指派了一名专家来帮助您。 您使用的是我们 SDK 的哪个版本?

    此致、
    阿尔茨

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

    谢谢 Alec、

    我使用  的是 SDK 的版本:10.1.1.00004。

    此致、

    Shivam

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

    您好、Shivam、

    当您说他的职能部门都不起作用时、您能否澄清您是否看到了我可以帮助您解决的特定错误? 此外、我相信 10.1.1.00004可能是 CCS 版本。  您将哪个版本的 simplelink_cc13x2_26x2_sdk_x_xx_xx_xx 用于示例项目? 谢谢!

    此致、

    Jenny

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

    我正在使用 SimpleLink CC13x2 26x2 SDK 4.20.01.04版本的 SDK。
    它们没有出现错误、但我无法看到来自 UART 的传入数据并将其保存在 SD 卡中。 尽管我能够单独验证每个问题。

    非常感谢您的帮助。

    谢谢、

    Shivam

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

    当我尝试调试代码时,我看到代码卡在 UART_open 调用下面粗体显示的 while (1)循环中。

    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_return_full;
    uartParams.baudrate = 115200;
    UART = UART_OPEN (CONFIG_UART_0、uartParams);
    if (UART == NULL){
    /* UART_open()失败*/
    while (1);
    }
    /*循环永久回显*/ 



    /*循环永久回显*/

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

    您好、Shivam、

    感谢您提供这些额外信息、并缩小计划的执行范围。

    我看到您在程序中初始化并在 UART 之前打开 Display。 您能否验证显示器是否未使用与 UART 相同的 UART 外设和引脚配置? 由于外设已在显示屏中使用、因此可能无法打开。

    此致、

    Jenny

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

     是的、我认为您正在写入、但我无法确定它是否使用同一 UART。 如果是、那么我如何更改它以进行显示。 我将附加 SysConfig 的快照供您参考。  

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

    您好、Shivam、

    感谢您的验证。 我会将 SysConfig 中的显示外设/引脚配置与 UART 外设/引脚配置进行比较。 例如、在"SysConfig UART -> PinMux Peripheral and Pin Configuration and SysConfig Display"->"PinMux Peripheral"和"Pin Configuration"下、确保它们不使用相同的外设、例如 UART0或 UART1。 同时确保 TX 引脚和 RX 引脚不是相同的。

    此致、

    Jenny  

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

    您好!
    错误已经被解决并且代码正在工作、我可以通过另一个微控制器看到来自 UART 的数据。  
    但是、我无法将数据保存到所连接的 SD 卡中。 我必须保存传入的 UART 数据、但目前我也无法在 SD 卡中保存虚拟数据。 我随附了最终代码供您参考。 代码卡在由语法突出显示的 while (input!='\n')循环中。 当我在此 while 循环中插入 fatsd 代码时、UART 数据也会停止在串行端口上。 我认为我需要细化这部分 fatsd 代码、以便可以在文件中执行 UART 读取和写入以及虚拟文本写入。

    非常感谢您的帮助、我想我已经结束了。
    e2e.ti.com/.../uartechofatsd-merged-uart-code-coming.txt

    while (输入!='\n')
    {
    UART_READ (UART、INPUT、1);
    UART_WRITE (UART、INPUT、1);
    } 

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

    您好、Shivam、

    我很高兴听到您能够看到通过 UART 传入的数据!

    在卡滞之前、它是否执行几次 UART_READSes 和 UART_REWITes? 我将验证另一个微控制器是否成功发送'\n'尾线字符。 为了帮助更好地进行调试、我将提供一些建议:

    -在您读取 UART_Read 后、将每个字符存储到缓冲区中、以便您可以跟踪另一个微控制器发送的字符。

    -分析 UART_READ 和 UART_WRITE 的返回值以缩小错误的来源。

    • UART_READ 返回从 UART 读取的字节数。 如果发生错误、则返回 UART_ERROR。
    • UART_WRITE 返回已写入 UART 的字节数。 如果发生错误、则返回 UART_ERROR。

    此致、

    Jenny

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

    谢谢 Jenny、因为您的帮助、我能够做到这一点。
    但仍有一些任务需要完成。
    是的、当我将 fatsd 代码插入 while (1)循环时、它会执行几次 UART_Reads 和 UART_Writes、然后再卡住。
    当我不将 fatsd 代码放入 while (1)循环时、它不会卡住、我很容易看到传入的 UART 数据。  
    问题不是来自另一侧的微控制器、而是位于 fatsd 代码中的某个位置、它会卡住。 我的目标是将传入的 UART 数据存储到 SD 卡中。 一种起始方法是将1个数据流存储到 SD 卡中、\n 然后我将考虑稍后存储所有数据。

    提前感谢。

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

    您好、Jenny 请参阅以下代码、此处代码卡在 fwrite 语句中。 我使用板载 LED 来调试代码无法达到关闭 LED 的状态,LED 会一直亮起。 您能帮助我解决此错误吗?

    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
    while (1)
    {
    
    UART_READ (handle、&rxBuf、1);
    
    //UART_WRITE (handle、&rxBuf、1);
    /*安装并注册 SD 卡*/
    sdfatfsHandle = SDFatFS_open (CONFIG_SDFatFS_0、DRIVE_NUM);
    
    src = fopen (inputfile、"w+");
    
    fwrite (textarray、1、strlen (textarray)、src);//代码不能到达此语句。
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_OFF);
    fflush (src);
    回卷(src);
    fclose (src);
    SDFatFS_Close (sdfatfsHandle);
    
    
    } 

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

    您好、Shivam、

    根据您对 LED 持续亮起的描述、似乎它卡在 fwrite 语句中。

    -调试调用堆栈在被认为停止时是否可以截屏? 我想查看它是否遇到异常或断句故障。

    -您是否可以验证 fopen 是否成功打开了文件名?

    此致、

    Jenny

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

    根据您对 LED 持续亮起的描述、似乎它卡在 fwrite 语句中。 :是的,它确实会卡在 fwrite 中,因为我已在 fwrite 之前的任何位置插入 led off 语句("GPIO_write (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_OFF);"),它运行良好,LED 熄灭。 只有在 fwrite 后,它才不会关闭。

    -调试调用堆栈在被认为停止时是否可以截屏? 我想查看它是否遇到异常或断句故障。 :您能告诉我这方面的一个分步过程吗?

    -您是否可以验证 fopen 是否成功打开了文件名? 不知道、但一种粗略的调试方法是使用 LED、我确实在 fopen 语句之后它会熄灭。

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

    您好、Shivam、

    点击 CCS 中的绿色虫子图标以启动调试会话。 应该有一个 Debug 窗口、此窗口在调试模式中打开一次。 在代码中到达所需位置后、点击"PAUS"、"Debug"窗口应显示调用栈。

    此致、

    Jenny

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

    好的、您要问的就是这个附加的图像。 请检查、我还想通知您代码卡在 UART_READ()而不是 fwrite 中。 我在调试器部分视图中验证了它。

    请告诉我如何解决这个问题。

    提前感谢。

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

    我认为 UART_READ 函数将进入阻塞模式、这就是它卡住的原因。 请参阅以下语法荧光笔中的代码。 您认为在非阻塞模式下实现 UART_Read 函数是否有助于消除此问题?

    UART_PARAMS_INIT (params);
    params.baudrate = 115200;
    params.writeDataMode = UART_DATA_TEXT;
    //创建一个数据处理关闭的 UART。
    params.writeDataMode = UART_DATA_BINARY;
    params.readDataMode = UART_DATA_BINARY;
    Params.readReturnMode = UART_return_NEWLINE;
    //params.readEcho = UART_ECHO_OFF;
    params.baudrate = 115200;
    
    /*打开用户 LED 指示初始化成功*/
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
    while (1)
    {
    //打开 UART 并执行读取操作
    句柄= UART_OPEN (CONFIG_UART_0、params);
    if (handle == NULL){
    /* UART_open()失败*/
    while (1);
    }
    
    UART_READ (handle、&rxBuf、1);
    UART_WRITE (handle、&rxBuf、1);
    UART_readCancel (handle);
    UART_Close (handle);
    //UART_WRITE (handle、&rxBuf、1);
    /*安装并注册 SD 卡*/
    sdfatfsHandle = SDFatFS_open (CONFIG_SDFatFS_0、DRIVE_NUM);
    src = fopen (inputfile、"r");
    如果(!src){
    /*打开文件进行读取和写入*/
    src = fopen (inputfile、"w+");
    如果(!src){
    while (1);
    }
    fwrite (textarray、1、strlen (textarray)、src);
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_OFF);
    
    }
    fclose (src);
    SDFatFS_Close (sdfatfsHandle);
    } 

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

    您好、Shivam、

    您可以尝试使用读取回调在非阻塞模式下执行 UART_READ、以查看这是否可以解决您的问题。

    此致、

    Jenny

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

    是的、这是我在上面的代码中尝试过的。  
    要在非阻塞模式下执行 UART_read(),必须传递以下参数。 请告诉我我是否正确、或者我必须做更多事情。

    UART_Handle handle;
    UART_Params 参数;
    
    UART_Params_init (&params);
    params.baudrate = 115200;
    params.writeDataMode = UART_DATA_text;
    Params.readDataMode = UART_DATA_TEXT;
    params.readReturnMode = UART_return_newline;
    handle = UART_open (someUART_configIndexValue、&params); 

    谢谢、

    Shivam

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

    您好、Shivam、

    您可以在以下链接中找到回调模式下的 UART 驱动程序示例。 这使用 UART2、但是、您可以对 UART 应用相同的更改。

    https://dev.ti.com/tirex/explore/node?node=AIn8Ns14w6iC4y0OWsuykQ__pTTHBmu__LATEST

    此致、

    Jenny

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

    感谢您的链接。 我将尝试实施它并返回。 此外、是否可以将 fatsd 代码合并到此示例中? 我是否必须为 fatsd 采用 TI-RTOS fatsd 代码或 NORTOS 代码?

    在合并 uart2Callback 和 fatsd 的两个代码时、我必须考虑哪些常规参数?

    我将在集成 fatsd 代码后附加下面 while 循环的代码。 请告诉我它是否正确?

    while (1){
    numBytesRead = 0;
    
    /*对 bytesRead 传递 NULL,因为它未在本示例中使用*/
    STATUS = UART2_READ (UART、INPUT、1、NULL);
    
    if (status!= UART2_STATUS_SUCCESS){
    /* UART2_READ()失败*/
    while (1);
    }
    
    /*在执行读回调之前不要写入*/
    SEM_WAIT (SEM);
    
    if (numBytesRead > 0){
    //status = UART2_WRITE (UART、INPUT、1、NULL);
    /*安装并注册 SD 卡*/
    sdfatfsHandle = SDFatFS_open (CONFIG_SDFatFS_0、DRIVE_NUM);
    src = fopen (inputfile、"r");
    如果(!src){
    /*打开文件进行读取和写入*/
    src = fopen (inputfile、"w+");
    如果(!src){
    while (1);
    }
    fwrite (textarray、1、strlen (textarray)、src);
    fclose (src);
    SDFatFS_Close (sdfatfsHandle);
    if (status!= UART2_STATUS_SUCCESS){
    /* UART2_write()失败*/
    while (1);
    }
    }
    

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

    已尝试在  中帮助您。 对于同一个问题、创建无数个帖子不会有所帮助。

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

    但问题没有解决、您停止回复、这就是我创建另一篇帖子的原因。 如果问题得到解决、我为什么要创建另一个帖子。

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

    不要在 UART 线程中 fopen/fwrite/fclose。

    基本上、步骤是:

    1.使用 fatsd 示例作为基础。

    2.将 UART 线程添加到 fatsd 示例中。

    3.使用信标控制在 UART 线程中接收到的将消息传递到 fatsd 线程中以写入 fatsd。

    希望这对您有所帮助。

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

    是的,我正在执行上述步骤1、2和3。 通过这些步骤、我一次只能接收一个字符、然后在按下复位后再次接收。 我还能够将虚拟数据写入文件一次。 但是、我希望以高数据速率同时接收 UART 数据。  
    如果我不在 UART 线程中执行 fopen/fwrite/fclose 操作、那么我将如何能够将 UART 数据写入 SD 卡。
    请参阅上面所附的代码、否则建议仅用于 UART 控制接收和写入的短代码。

    谢谢、

    Shivam

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

    您好、Shivam、

    我将继续并关闭该线程、因为这是重复的。 请在以下主题中继续回答您的问题:

    https://e2e.ti.com/support/wireless-connectivity/bluetooth/f/538/t/945251

    此致、

    Jenny