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/TMS320F2.8379万D:USB串行通信

Guru**** 2587345 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/656815/ccs-tms320f28379d-usb-serial-communication

部件号:TMS320F2.8379万D

工具/软件:Code Composer Studio

大家好,

我目前正在与TMS320F2.8379万D一起研究与通信相关的主题,特别是德州仪器(TI)提供的名为USB_DEP_SERIAL的示例。 此示例建立了两个串行终端之间的通信,其中一个终端中写入的内容可以在另一个终端上写入,反之亦然

我打开此线程是为了询问是否有人知道是否可以修改此示例或另一个示例(我正在考虑USB_DEP_BULK项目)以便只拥有一个终端。 也就是说,我要做的是将数据从DSP发送到我计算机上的串行终端,而不是从计算机发送到DSP。

提前非常感谢

此致

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

    您可以修改USB_DEP_BULK或USB_DEP_SERIAL以完成此操作。

    USB_DEP_SERIAL必须连接到主机PC。 一个使用SCI,另一个使用USB。 您可以修改此示例,使其仅在需要时使用USB串行连接。 此外,USB_DEP_BULK仅通过USB批量传输与主机PC建立一个连接。 您也可以使用此示例。 这取决于您将使用/开发的主机PC应用程序以及您对我们提供的USB库或示例的满意程度。

    希望这能有所帮助!

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

    您好,Sal,

    首先,感谢您提供信息。

    我一直在做一些研究,我找到了您在以下链接上发布的一些示例: e2e.ti.com/.../237.8063万

    我已经尝试过,在主机PC中使用Visual Studio 2015,但它无法正常工作。 首先,当我生成CCS项目时,会出现以下警告:

    类型为"unsigned char *"的«#169-D参数与类型为"uint8_t *"»的参数不兼容,该参数是指函数 USBDBulkPacketWrite中的参数。 由于在代码过程中该函数被调用两次,因此该警告出现两次。 它还会发出警告,因为EchoNewDataToHost功能已声明但从未使用。

    在PC项目中,我发现它无法正常运行,因为它堆叠在以下行中:

    dwError = ReadUSBPacket(husb, szBuffer, echo_packet_size,&ulRead,infinite, 空);

    考虑到所有这些信息,当我同时启动CCS和PC项目时,在新窗口中,在说明我们处于回波模式后,它将显示以下内容:

    在回波模式下运行:按Ctrl+C退出。

    吞吐量:   0kbps。   数据包:0

    此消息始终显示,而不更改速率(以kbps为单位)或发送的数据包数。

    我想知道,您是否可以说出此示例无法在我的项目中正常工作的原因,以及我是否必须进行一些更改才能使其正常工作

    非常感谢

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    设备似乎未正确连接。 确保设备正在运行并已正确连接(枚举)到Windows PC,并且驱动程序已正确安装。

    之后,执行HOST VS项目。 这应开始从设备读取。 一旦发生这种情况,主机将更新数据包计数和吞吐量。

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

    这些是我使用过的最新项目。

    e2e.ti.com/.../usb_5F00_bulk_5F00_example_5F00_stress.zip

    e2e.ti.com/.../8015.usb_5F00_dev_5F00_bulk_5F00_stress.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    首先,我有一个关于您刚刚发送给我的CCS项目的问题,因为有两个.c档案库(USB_DEP_BULLG.c和USB_DEP_BULL_RULES.c)。 我应该使用以下哪一项? 两者之间是否有特别的区别?
    不管怎样,为了检查设备是否连接正确,我尝试了原始的批量项目,在该项目中,您输入了一个字符串,返回时将交换所有字符,并且它工作正常。 我是否必须检查其他任何内容才能完全确定设备已连接?
    谢谢!
    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    其中一个文件应已从项目属性中排除。 我认为您应该使用USB_DEP_BULLET.C. 它是原始版本的修改版本。

    您可以在设备管理器中查看设备是否已连接。 如果已连接,它将显示在Windows设备管理器中。

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

    您好,

    现在一切都很完美;问题是我使用的是USB_dev_Bulbate_stress.c而不是USB_dev_Bulb.c.

    尽管如此,我还是想问您一些有关此项目的问题。 首先,在变量'buffer '中发送的数据(使用[0,1,2,...,255]初始化), 我可以在VS项目中的某个变量中获取它们吗? 我这样问是因为在原始项目中,这些信息(发送到DSP的数据和PC接收的数据可以在'zBuffer'中找到,但在这种情况下,该变量不具有在'buffer'中发送的相同信息。

    另一个问题是,我想知道我是否可以 在需要时调用USBDBulkPacketWrite函数,而不必依赖TxHandler中断;实际上根本不需要使用它。

    非常感谢

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我终于解决了有关szBuffer缓冲区的问题。 我没有注意到在更新字节和数据包计数器后有一个重要的评论行。
    但是,我无法解决另一个问题。 我不知道TxHandler中断何时执行,因为我以为它是在某些数据即将发送到主机时执行的,但在该函数内,调用USBDBulkPacketWrite函数发送缓冲区。 RxHandler也是如此,我不知道在程序运行期间是否执行了此中断,因为,假定数据只从设备发送到PC主机;设备不接收任何数据。 例如,我是否可以在main中使用USBDBulkPacketWrite while (1)循环,前面是USBDBulkTxPacketAvailable,而不必使用TxHandler?
    非常感谢你能抽出时间
    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    我很高兴您能正常工作,并且很好地理解了示例。

    您可以从应用程序调用USBDBulkPacketWrite()函数,例如while (1)循环。

    只需确保您有足够的可用空间,就像我在示例中所做的那样。

    uINT32_t ui32Space = USBDBulkTxPacketAvailable(&g_sBulkDevice);
    IF (ui32Space)

    USBDBulkPacketWrite(&g_sBulkDevice, buffers, ui32Space, tru);
    }

    希望这有所帮助。

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

    您好,

    我调整了您发布的代码的主要功能,以执行您刚刚告诉我的内容。 我有以下代码:

    While (FirstPacket)(同时(FirstPacket

        IF (g_b连接)
        {
           IF (FirstPacket)
           {
               ui32Space = USBDBulkTxPacketAvailable(&g_sBulkDevice);

               IF (ui32Space)
                  USBDBulkPacketWrite(&g_sBulkDevice, buffers, ui32Space, tru);

               FirstPacket = 1;

           }

        }
    }

    同时(1)

        ui32Space = USBDBulkTxPacketAvailable(&g_sBulkDevice);

        IF (ui32Space)
           USBDBulkPacketWrite(&g_sBulkDevice, buffers, ui32Space, tru);
    }

    为了看一切是否正常,我在行中设置了一个断点(1),但它从未达到该点。 但是,我设置了两个附加断点:一个在TxHandler中断的第一行,另一个在它使用函数USBDBulkPacketWrite的行中。 在这种情况下,当FirstPacket=1发送第一个数据包后,它总是在TxHandler中断的第一行中停止,并从一个断点跳到另一个断点,永远不会到达我在main函数中设置的第一个断点。 我想知道这个操作,TxHandler在做,我只能在主页上执行,也就是说,从不需要使用TxHandler中断并将其清除。

    非常感谢,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将调用TXHandler函数,因为在成功传输后,它被配置为USBlib中的回调函数。 但是,您不必在该功能中执行任何操作。 您可以在主控制环路中处理它。

    请参阅USB库用户指南了解更多信息。

    希望这有所帮助。

    SAL