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.

[参考译文] TMS320C5535:写入 SD 卡

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/678515/tms320c5535-writing-to-sd-card

器件型号:TMS320C5535

您好!

我在写入 SD 卡时遇到困难。 我有一个简单的测试程序、它使用 EZDSP5535_SDCARD_WRITE 函数将填充了一些增量整数值的缓冲器写入 SD 卡。 然后立即将这些值读回缓冲区、并执行简单的 print 语句以确认读取和写入函数按预期工作。 下面是我用于读取/写入的代码。 现在、当我设置断点以尝试调试时。 在写入函数期间、我得到一个 mmcStatus =-10、这是初始化的默认值。 这是预期的结果、因为 API 引用未提及返回值。 然后、对于读取函数、我得到一个 mmcStatus = 0的返回值。 当我打印值时,print 语句不返回任何值。 我已经陷入困境几天了、我已经迷失了下一步的方向。 最后、我计划使用 SD 读/写功能将我的语音记录到 SD、然后将其回放给我。

提前感谢您、

谢里登

/*

 * 德州仪器公司版权所有2010。

 * 保留所有权利。 德州仪器(TI)公司的财产。

 * 使用、复制或披露此代码的受限权限为

 * 通过合同授予。

#include

#include "hellocfg.h"

#include "ezdsp5535.h"

#include "stdint.h"

#include "aic3204.h"

#include "ezdsp5535_I2S.h"

#include "CSL_I2S.h"

#include "ezdsp5535_led.h"

#include "ezdsp5535_SAR.h"

#include "CSL_PLL.h"

#include "ezdsp5535_sdcard.h"

#define MAX_缓冲 区大小512

#define SYS_ICR     *(volatile ioport uint16*)(0x0001)

extern CSL_I2sHandle hI2;

extern void audioProcessingInit(void);

extern Int16 aic3204_loop_lineIn();

void systemInit (void);

uint16 writeBuff[MAX_buff_size/2];

uint16 readBuff[MAX_buff_size/2];

void main (void)

{

  int i、j;

  /*初始化 BSL */

  EZDSP5535_init();

  EZDSP5535_SDCARD_INIT ();

memset (writeBuff、0、sizeof (writeBuff));

memset (readBuff、0、sizeof (readBuff));

  /*初始化 LED */

  EZDSP5535_LED_INIT();

  //配置编解码器芯片

  配置 Aic3204();

  /*初始化 I2S */

  EZDSP5535_I2S_init ();

  /*初始化 SAR */

  EZDSP5535_SAR_INIT ();

/*初始化 OLED 显示*/

  EZDSP5535_OSD9616_init();

  EZDSP5535_OSD9616_SEND (0x00、0x2e); //取消激活滚动

  /*通过 BIOS 调用启用中断*/

  C55_enableInt (14);//参考技术手册、I2S2 TX 中断

  C55_enableInt (15);//参考技术手册、I2S2 Rx 中断

  对于(i = 0;i < MAX_buff _size/2;i++){

  writeBuff[i]= i;

  }

  EZDSP5535_SDCARD_WRITE (0x200、MAX_缓冲 区大小、writeBuff);

  EZDSP5535_SDCARD_READ (0x200、MAX_缓冲 区大小、readBuff);

  for (i=0;<MAX_BUFF_SIZE/2;i++){)

  printf ("%u\n"、readBuff[i]);

  printf ("%\d"、i);

  }

//  audioProcessingInit();

//  aic3204_loop_lineIN();

  //在 main()退出 DSP/BIOS 调度程序启动后

}

空 systemInit (空)

{

  uint16 i;

  PLL_Obj pllObj;

  CSL_Status 状态;

  pll_handle hPll;

  PLL_Config * pConfigInfo;

  PLL_Config pllCfg_v2_100MHz  ={0x8BE8、0x8000、0x0806、0x0000};

  /*配置空闲控制*/

  SYS_ICR = 0xFF2E;

  asm (" idle");

  /*重置外设*/

  CSL_fins (CSL_SYSCTRL_REGS->PSRCR、SYS_PSRCR_COUNT、0x02);

  CSL_SYSCTRL_REGS->PRCR = 0xfb;

  设备复位的/*延迟*/

  对于(i=0;i< 200;i++);

  /*设置 PLL */

  状态= PLL_init (&pllObj、CSL_PLL_INST_0);

  hPll =(PLL_Handle)(&pllObj);

  PLL_RESET (hPll);

  pConfigInfo =&pllCfg_v2_100MHz;

  状态= PLL_CONFIG (hPll、pConfigInfo);

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢里丹
    您的代码是否基于 C55x CSL?
    如果不是、我建议您使用 CSL 来开发您的 SD 应用。

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

    是的、它基于 C55x CSL。 我刚刚达到了一个点、现在我知道 return 语句是一个预定义的 CSL_EMMCSD_TIMEOUT 宏(-10)。 我是否可以执行故障排除程序来解决此错误?

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

    **更新**我发现此超时是从预先触发的错误延伸的,该错误是无效的参数。 下面是我用于 CSL 的代码。 我可以看到我没有传递任何无效参数。 我已从先前发布的代码后退一步、进行更简单的测试。

    #include

    #include "hellocfg.h"
    #include "ezdsp5535.h"
    #include "stdint.h"
    #include "aic3204.h"
    #include "ezdsp5535_I2S.h"
    #include "CSL_I2S.h"
    #include "ezdsp5535_led.h"
    #include "ezdsp5535_SAR.h"
    #include "CSL_PLL.h"
    #include "ezdsp5535_sdcard.h"
    #include "stdio.h"

    #define MAX_缓冲 区大小512u

    #define SYS_ICR *(volatile ioport uint16*)(0x0001)

    extern CSL_I2sHandle hI2;
    extern void audioProcessingInit(void);
    extern Int16 aic3204_loop_lineIn();
    void systemInit (void);
    uint32 cardAddr;

    uint16 writeBuff[MAX_buff_size/2];
    uint16 readBuff[MAX_buff_size/2];

    void main (void)
    {
    int i、j;

    /*初始化 BSL */
    EZDSP5535_init();

    EZDSP5535_SDCARD_INIT ();
    memset (writeBuff、0、sizeof (writeBuff));
    memset (readBuff、0、sizeof (readBuff));

    //配置编解码器芯片
    配置 Aic3204();

    /*初始化 I2S */
    EZDSP5535_I2S_init ();

    /*通过 BIOS 调用启用中断*/
    C55_enableInt (14);//参考技术手册、I2S2 TX 中断
    C55_enableInt (15);//参考技术手册、I2S2 Rx 中断

    //使用0-255填充 writeBuff 以测试 SDread/write 函数
    对于(i = 0;i < MAX_buff _size/2;i++){
    writeBuff[i]= i;
    }

    /*
    *卡地址已尝试0x00
    * 0x01
    * 0x200
    * 0
    * 1.
    *
    CardAddr = 0x01;

    EZDSP5535_SDCARD_WRITE (cardAdr、MAX_buff_size、&writeBuff[0]);

    EZDSP5535_SDCARD_READ (0x01、MAX_缓冲 区大小、readBuff);

    for (i=0;<MAX_BUFF_SIZE/2;i++){)
    printf ("%u\n"、readBuff[i]);
    printf ("%d "、i);
    }
    }

    空 systemInit (空)
    {
    uint16 i;
    PLL_Obj pllObj;
    CSL_Status 状态;
    pll_handle hPll;
    PLL_Config * pConfigInfo;
    PLL_Config pllCfg_v2_100MHz ={0x8BE8、0x8000、0x0806、0x0000};

    /*配置空闲控制*/
    SYS_ICR = 0xFF2E;
    asm (" idle");

    /*重置外设*/
    CSL_fins (CSL_SYSCTRL_REGS->PSRCR、SYS_PSRCR_COUNT、0x02);
    CSL_SYSCTRL_REGS->PRCR = 0xfb;

    设备复位的/*延迟*/
    对于(i=0;i< 200;i++);

    /*设置 PLL */
    状态= PLL_init (&pllObj、CSL_PLL_INST_0);
    hPll =(PLL_Handle)(&pllObj);
    PLL_RESET (hPll);
    pConfigInfo =&pllCfg_v2_100MHz;

    状态= PLL_CONFIG (hPll、pConfigInfo);
    }


    秘书长的报告
    以下是写入函数及其对 MMC_WRITE 的后续函数调用的参数
    Int16 EZDSP5535_SDCARD_WRITE (uint32 addr、uint32 len、uint16* pWriteBuff)

    CSL_Status MMC_WRITE (CSL_MmcsdHandle hMmcsd、
    uint32. CardAddr、
    uint16 noOfBytes、
    uint16 *pWriteBuffer)
    {
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢里丹
    您不使用 CSL、而是使用来自 Spectrum Digital 的此处代码。 support.spectrumdigital.com/.../
    我指 的是 software-dl.ti.com/.../index_FDS.html 中的 C55x TI CSL 代码。

    您能否尝试 TI CSL 中的 SD 示例以查看您是否看到相同的错误?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Lali、
    我无法使用您在上面提供的 TI CSL 超链接我收到一条错误消息、提示

    处理您的请求时出错。
    参考#132.32781bb8.1523390894.2add0dfd

    最棒的
    Sheridan Mason
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢里丹
    请尝试访问 software-dl.ti.com/.../index_FDS.html

    Lali