Thread 中讨论的其他器件:SYSBIOS、
工具/软件:TI-RTOS
嗨,人好:)。
我正在尝试使用 SPI 驱动程序连接到我的 SD 卡。
从我第一次尝试发送第一个字节(0xFF)开始、SPI_Transfer 就会卡住。
以下是我的代码:
int main (空)
{
/*呼叫板初始化函数*/
Board_initGeneral();
spi_init();
/*启动内核。 *
/*UART_init();
UartLog_init (UART_open (Board_UART、NULL));
iCall_init();*/
Task_handle myTsk;
Task_Params taskParams;
ERROR_Block eb2;
ERROR_INIT (&eb2);
/*创建1个优先级为15的任务*/
Task_Params_init (&taskParams);
taskParams.STACKSIZE = 512;
taskParams.priority = 2;
myTsk = Task_create (myTskFunc3、&taskParams、&eb2);
if (myTsk == NULL){
System_abort ("任务创建失败");
}
BIOS_start();
返回(0);
}
无效 myTskFunc3 (UArg arg0、UArg arg1)
{
System_printf ("任务开始\n");
system_flush();
ExtFlash_open();
}
/*有关说明,请参阅 ExtFlash.h 文件*/
bool ExtFlash_open (void)
{
bool f;
hFlashPin = PIN_OPEN (&pinState、BoardFlashPinTable);
if (hFlashPin ==空)
{
返回 false;
}
/*确保 SPI 可用*/
f = SPI_OPEN (SPI_BIT_RATE);
如果(f)
{
rxSPI();
}
静态内联 UChar rxSPI()
{
SDSPIDataType rcvdat;
const uint8_t wbuf[]={0xFF};
int ret = SPI_WRITE (wbuf、sizeof (wbuf));
}
静态 int spi_write (const uint8_t * buf、size_t len)
{
SPI_Transaction masterTransaction;
masterTransaction.count = len;
masterTransaction.txBuf =(void*) buf;
masterTransaction.arg =空;
masterTransaction.rxBuf =空;
返回 SPI_transfer (spiHandle、&masterTransaction)? 0:-1;//此处是程序被卡住的位置
}
静态 bool SPI_open (uint32_t 比特率)
{
/*将 SPI 配置为主接口*/
SPI_Params_init (&spiParams);
spiParams.bitrate =比特率;
spiParams.mode = SPI_MASTER;
spiParams.transferMode = SPI_MODE_BLOCKING;
/*尝试打开 SPI。 *
spiHandle = SPI_open (Board_SPI0、&spiParams);
return spiHandle!=空;
}
当我调试并观察 RTOS 时-扫描错误
我一直都得到-
错误:扫描挂起队列时出现问题:JavaException:java.lang.exception:target memory read failed at address:0xbebebe、length:8根据应用程序的段映射,此读取位于无效地址。 应用程序可能未初始化或已损坏。"
我有几个油炸玉米饼-
1.显而易见的。。。。 为什么会发生这种情况? 我不认为它与 SD 卡有关.. 我想我滥用了一个驱动程序.. 但我不知道是哪一个。
2.为了初始化 SD 卡、我需要将 MOSI 和 CS 设置为高电平、并向 SCLK 发送至少74个时钟脉冲。 是否有人知道我是否需要 使用 GPIO 驱动器将 MOSI 设置为高电平?
如果是、我是否使用 SPI 驱动器发送时钟脉冲? 这是否意味着我将两个驱动器与同一个引脚同时使用? 这是可以的吗?
3. RTOS 错误是否与程序被卡住的事实有关?
如果有任何帮助,我将不胜感激:)
谢谢、
体层器。




