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.

[参考译文] TMS320F28379D:F_WRITE (特别是 xmit_datablock 和 RCVR_SPI)在尝试写入 SD 卡时失败。

Guru**** 2616045 points

Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/692036/tms320f28379d-f_write-specifically-xmit_datablock-and-rcvr_spi-failing-when-attempting-to-write-to-sd-card

器件型号:TMS320F28379D

Mark、您好!

我使用 TMS320F28379D 写入 SD 卡上的文本文件,但是正如本文前面所述,速度真的很慢……

我不知道这是否已经解决了。

基本上、我的代码如下所示、现在我将以循环方式在 SD 卡上的文本文件中写入虚拟变量...但是、要为60000倍的循环写入虚拟变量、所需时间大约为45秒、我将以12.5MHz 的频率运行 SPI ...对此有任何见解 我可以提高速度吗?

char CH1_String_SD[20]="";
char CH2_String_SD[20]="";
CHAR CH3_String_SD[20]="";
CHAR CH4_String_SD[20]="";
CHAR CH5_String_SD[20]="";
char all_5_channels[102]="";

字 btrb = 102;//每次写入4个字节的字节数和制表符空间
字 BRB = 102;

f_open (&fil、"PSI.txt"、fa_create_always);
f_close (&fil);
f_open (&fil、"PSI.txt"、fa_write);

对于(SD_loop2 = 0;SD_loop2 < 60000;SD_loop2++)

//向 SD 卡写入5个字,每个字32位//

InitData1_X = 4294967;// X 轴虚拟
InitData2_Y = 11005547;// Y 轴虚拟
InitData3_Z = 14789421;// Z 轴虚拟
InitData4_T = 16723899;//温度虚拟
InitData5 = 12345;//编码器虚拟

Channel1_SD = InitData1_X;
CHANNEL2_SD = InitData2_Y;
CHANNEL3_SD = InitData3_Z;
CHANNEL4_SD = InitData4_T;
CHANNEL5_SD = SD_loop2;

ltoa (Channel1_SD、CH1_String_SD);
LTOA (CHANNEL2_SD、CH2_String_SD);
LTOA (CHANNEL3_SD、CH3_String_SD);
LTOA (CHANNEL4_SD、CH4_String_SD);
LTOA (CHANNEL5_SD、CH5_String_SD);

strcpy (all_5_channels、CH1_String_SD);// 20字节
strcat (all_5_channels、CH2_String_SD);// 20字节
strcat (all_5_channels、CH3_String_SD);// 20字节
strcat (all_5_channels、Ch4_String_SD);// 20字节
strcat (all_5_channels、CH5_String_SD);// 20字节
strcat (all_5_channels、newline);// 2字节

f_write (&fil、&all_5_channels、btrb、&BRB);

谢谢

Johann

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

    您能否使用示波器确认 SPI 时钟实际上以预期的速率运行? 您有没有做过任何实验来确定代码最慢的部分在哪里? 比如使用 CCS 时钟和单步执行代码?

    您是否在编译器选项中启用了优化?

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

    尊敬的惠特尼:

    感谢您的回答。 我将按照您的建议尝试这些选项、因为我没有在编译器选项中启用优化、我也将检查时钟。。。。。。。。。。。。。。。。。。

    感谢您的建议

    Johann

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

    尊敬的惠特尼:

    我已确保时钟在16MHz 频率下正确运行、如下所示(黄色迹线)。

    我觉得有一点奇怪的是、每次写入之间都有2.5ms 的延迟、我认为这是问题的根源、因为在此期间不发送数据、也不发送时钟。。。在 FATF 中写入时、这种延迟是否始终存在? 这是否是一个硬件问题...就像在微控制器上的代码中一样、在每次迭代中仅存在重复 fwrite 的循环...就像在我之前的帖子中一样

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否使用 CCS 配置文件时钟来查看您的循环中的某些函数调用占用了多少个周期? 我想我还记得,ltoa()可能非常耗时。

    processors.wiki.ti.com/.../Profile_clock_in_CCS

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

    是否有更新? 您是否发现最耗时的内容?

    惠特尼