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/TM4C1294NCPDT:如何提高 TM4C1294NCPD 高速 USB 传输速度? 我使用了 ADS127L01EVM 电路板开发

Guru**** 2463330 points
Other Parts Discussed in Thread: ADS127L01EVM, ADS127L01

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/656078/ccs-tm4c1294ncpdt-how-to-improve-tm4c1294ncpd-high-speed-usb-transfer-speed-i-used-the-ads127l01evm-board-development

器件型号:TM4C1294NCPDT
主题中讨论的其他器件:ADS127L01EVMADS127L01

工具/软件:Code Composer Studio

大家好:

我 开发的 DAQ 系统使用的是 ADS127L01,采样速度可达512K,这意味着可以输出512k *8*3=12.228Mbps 数据。(一个 ADC 数据使用3字节)。 ADS127L01EVM 使用 TM4C1294NCPD+USB 高速 外部 PHY USB3320C-EZK、我使用 libusb API 在 Linux 中编写应用程序代码、测试批量传输、但速度仅为431*8*3kbps=10.344Mbps、ADS127L01需要  

DRDY 引脚。 我不知道如何使用 DMA 通过 SPI 端口进行采样,我不使用 DMA,当 USB USB_EVENT_RX_Available 触发时,我对 ADC 代码进行采样 当主机应用程序发送赞扬时,我需要更高 的传输速度? 如何操作? 请帮我,谢谢。

以下代码:

 案例 USB_EVENT_RX_Available:
       {
      
           sendDataToHost(); //将样本发送到主机应用程序
           中断;

       }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

无效
sendDataToHost(空)

   char *p=NULL;
    p=strstr (g_pui8USBRxBuffer、"REGMAP");

    if (p){

        readRegs (g_pui8USBTxBuffer);//读取 REGMAP
        USBBufferDataWritten (&g_sTxBuffer、(8));
    }

    p=strstr (g_pui8USBRxBuffer、"Collect");

     if (p){
           while (readblock (g_pui8USBTxBuffer、3、adc_data_NUM));//读取示例代码
           USBBufferDataWritten (&g_sTxBuffer、ADC_DATA_NUM*3);

     }

   
 }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

内联 uint8_t readblock (uint8_t * RxData、uint8_t blocksize、uint32_t NUM){


       uint32_t index=0、rx_index=0;
       sendCommand (reset_opcode_mask);
       sendCommand (start_opcode_mask);
       sendCommand (RDATA_OCODE_MASK);

//   UARTprintf ("blocksize=%d\r\n"、blocksize);
   for (index=0;<NUM;index++){

       while (nDRDY_REG);

//              UARTprintf ("IDEX=%d\r\n", 索引);
            RX_index=3*索引;
//              UARTprintf ("rx_index=%d\r\n"、 rx_index);


      switch (blocksize){
                  case single_adc:{


                      HWREG (SPI_base + SSI_O_DR)= 0x00;
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_TNF));

                        HWREG (SPI_base + SSI_O_DR)= 0x00;
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_TNF));
                        HWREG (SPI_base + SSI_O_DR)= 0x00;
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_TNF));

                     /*等待数据出现*/
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_RNE));
                        /*获取该数据*/
                        RxData[0+Rx_index]= HWREG (SPI_BASE_SSI_O_DR);
//                        UARTprintf ("%2X\r\n"、  RxData[0+Rx_index]);
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_RNE));
                        RxData[1+Rx_index]= HWREG (SPI_BASE_SSI_O_DR);
//                        UARTprintf ("%2X\r\n"、  RxData[1+Rx_index]);
                        while (!(HWREG (SPI_base + SSI_O_SR)& SSI_SR_RNE));
                        RxData[2+Rx_index]= HWREG (SPI_BASE_SSI_O_DR);
//                        UARTprintf ("%2X\r\n"、  RxData[2+Rx_index]);
//                       UARTprintf ("--\n" );

                        中断;

                  }

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

    [引用 user="freme"]...测试批量传输,但速度仅为431*8*3Kbps =10.344Mbps[/引用]

    如果您能很好地描述您的"测试和测量方法"以确定10.344Mbps、那将非常有用。

    这是"突发测量"吗?   测试期间的数据传输大小是多少?    请注意、"数据传输太小-如果在单个(小)传输上进行测量(仅限)、则每次传输之间需要"中断"-提供的测量值小于正确(实际)的测量值!

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

    [引用 user="freme"] ADS127L01 需要一个 DRDY 引脚。 [/报价]

    没错、就是这样。

    快速扫描 ADS127L01的数据表后-器件进行"SPI"管理/连接-对 DRDY 的"反应"至关重要。   (尤其是在寻求"最高传输速率"时。)

    鉴于(上述)-您使用"EVM"(显然、它会使器件运行变得"轻松")是否不可能导致(不可避免) "传输速度降低?"    

    正如您所注意到的-您(正确)使用 "SPI 耦合至 µDMA Ω"- 保证了"最佳传输速度"。    

    同样、我相信(实际上是一种很快形成的信念) EVM 会导致"传输速度降低"。    您对"您如何进行此类测量-尤其是此类测量过程中传递的数据长度"的描述 将非常有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,我使用了 libusb API,将接收数据数组大小定义为75000*3 (使用一个 ADC 数据3字节),并且我打印 libusb_bulk_transfer 函数运行时间,当我执行主机应用程序时,需要174ms,。 我使用逻辑分析仪来捕获 SPI 总线,我发现 CS 信号周期每512K 一次,这意味着 TM4C1294微控制器 SPI 可以有机会读取数据。 但该函数需要174ms,这意味着75000*3*8*1000/174=10.344Mbps。 实时样本,我们可以找到75k*1000/174=431K, 然后、不是微控制器机会主义者读取数据、我认为主要问题是传输时间太长、ADS127l01EVM 还支持全速 USB、然后我使用全速模式进行传输、libusb_bulk_transfer 函数需要更多的时间到达400ms。




    #define ADC_DATA_NUM 75000
    #define RXADC_DATA_SIZE (ADC_DATA_NUM*3+1)



    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    INT RET,I;
    gettimeofday (&tBegin、NULL);
    ReadADC (handle、collect、RDATA、RXADC_DATA_SIZE、0);//使用批量读取75k*3字节数据
    gettimeofday (&tend、NULL);
    Long DetaTime=1000000L*(tp.tv_sec-tBegin.tv_sec)+(tp.tv_usec-tBegin.tv_usec);//计算时间
    printf ("time=%LDU\r\n"、DetaTime);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的朋友-我读了几次(希望),才正确掌握了你的报告。 (昨晚/清晨不能这样做)

    您使用逻辑分析仪来确认 SPI 总线速度-正如您所说的那样-证明:"当仅限于 SPI 数据流时、TM4C MCU 和这款(异域) 24位 ADC 之间的一切都很好!" 好的。

    作为一个"亲吻的粉丝"-使用(另一个) USB 设备(而不是您的 TM4C)是否没有用处-积极确认您的 ADS-EVM"真正"能够支持(并维持)"全速 USB"。

    如果这种 USB 性能可以得到证实-这种情况提供了相当"确凿的证据"、证明"您的 USB 方法和/或 TM4C 的 USB 性能-可以(在某种程度上)怀疑"。   除此之外、"至少建立"一个已知的" 我已超出了我的能力、无法提供进一步的建议...