armsys2410 大容量sd卡驱动开发 (再续)-----dma传输线程失败的问题

ljb409   2008-11-4 13:42 楼主

通过串口打印的信息:
。。。。。
CSDIOControllerBase::Set_SDI_Bus_Width_4Bit
CSDIOControllerBase::SetClockRate - Clock rate set to 12687500 Hz

。。。。。。。。。。。。。。。

CSDIOControllerBase::BusRequestHandler BusRequestHandler starts (CMD:17)(发送命令17)
CSDIOControllerBase::Start_SDI_Clock SDHCD: Clock started...
in CSDIOControllerBase::SetupDmaXfer
CSDIOControllerBase::Stop_SDIO_DMA_Channel(停止dma通道)
CSDIOControllerBase::Get_SDI_Bus_Width(获得宽度为4)
CSDIOControllerBase::SendCommand SendCommand (0x00442800, 0x0011, 0x00000000, 0x0001, 0x1) starts
CSDIOControllerBase::SendCommand sendSDICommand short response6 required
CSDIOControllerBase::BusRequestHandler SDHCD:BusRequestHandler ends
CSDIOControllerBase::GetCommandResponse --GetCommandResponse started
CSDIOControllerBase::GetCommandResponse --GetCommandResponse returned SD_API_STATUS_SUCCESS(命令17的响应好像没错阿)
CSDIOControllerBase::Enable_SDIO_DMA_Channel
CSDIOControllerBase::Get_SDI_Bus_Width
63CSDIOControllerBase::TransferIstThread : Wait Failed!(为什么dma传输线程失败呢)
CSDIOControllerBase::Stop_SDIO_DMA_Channel
CSDIOControllerBase::Is_SDIO_Interrupt_Enabled
125CSDIOControllerBase::SDIO_Interrupt_Disable(是不是有sd卡插入,sd中断就关闭)
CSDIOControllerBase::Stop_SDI_Clock SDHCD: Clock stopped...

回复评论 (12)

使用的是微软的2007年4月份针对sdhc更新的源代码,
另有几个疑惑
1 CSDIOControllerBase是专门针对于sdio卡的驱动吗?
2 如果不是,而是可以兼容各种sd卡的驱动,那么在我的bsp中有这么3个系统中断
#define SYSINTR_SDMMC_CARD_DETECT   (SYSINTR_FIRMWARE+15) 用于发觉sd卡的中断,实际中断号18在armint.c中定义并将中断与逻辑中断关联

  #define SYSINTR_SDMMC   (SYSINTR_FIRMWARE+14) 实际中断号21在armint.c中定义并将中断与逻辑中断关联
  #define SYSINTR_SDMMC_SDIO_INTERRUPT    (SYSINTR_FIRMWARE+16) 实际中断号21在armint.c中定义并将中断与逻辑中断关联,但是这两个中断对应的系统中断不一样

而CSDIOControllerBase中要输入一个sdio中断,我该输入哪一个?
我现在用的就是金士顿4G sd卡,他应该属于哪个中断??
点赞  2008-11-4 13:55
up
点赞  2008-11-4 14:30
搞过1g的CF.
1.的话可以肯定不是的。
2.不敢确定,但感觉是SYSINTR_SDMMC_SDIO_INTERRUPT这个。
点赞  2008-11-4 14:41
我在编以后的文件夹看见了sdbus2.dll,这个与sdbus.dll有什么区别
点赞  2008-11-4 14:57
up
点赞  2008-11-4 15:16
老兄,你的这个都续了好几回了吧。呵呵。
点赞  2008-11-4 16:38
呵呵,问题老是解决不了。
明天还要请你多多指教
点赞  2008-11-4 16:58
你如果使用的是Memory卡的话不用去理会那个SDIO的中断。
存储卡使用的是Detect中断和DMA中断。
那个SDIO中断只是在使用SDIO卡时才会使用到。
点赞  2008-11-4 21:09
dma线程最后是等待超时了,才返回失败。也就是说dma事件没发生--意味着dma系统中断没有。于是我分析要不就是dma0中断与系统中断dma0没关联上,要不就是dma0中断本身没发生。从初始化sd卡的信息可以看到:

::: SYSINTR_DMA0   OEMInterruptDisable说明dma0中断给禁用了。我不明白为什么一初始化时就给它禁了????????????
点赞  2008-11-5 08:17
你就看这两个中断:
#define SYSINTR_SDMMC_CARD_DETECT  (SYSINTR_FIRMWARE+15) 用于发觉sd卡的中断,实际中断号18在armint.c中定义并将中断与逻辑中断关联

  #define SYSINTR_SDMMC  (SYSINTR_FIRMWARE+14) 实际中断号21在armint.c中定义并将中断与逻辑中断关联
点赞  2008-11-5 09:36
问题解决了,感谢gsymichael ,谢谢你!!!!!!!!!!!!
我一直以为 SYSINTR_SDMMC  是没用的,而用的是 #define SYSINTR_SDMMC_SDIO_INTERRUPT    (SYSINTR_FIRMWARE+16)

哈哈,大哥,我太兴奋了!!!虽然有点幼稚,而且这对于你来所太过于小儿科,可是只是我第一次接触驱动,过程很痛苦也很美妙。万分感谢!!!!
点赞  2008-11-5 13:18
路过
点赞  2009-12-26 17:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复