11750|40

85

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于SD无线网卡 [复制链接]

各位:
   我的系统可以识别SD卡,读写都没有问题,
插上SD无线网卡也可以识别,也可以找到无线路由,可以设置,可以连接
但是问题是刚刚连接上就死机!!
请问各位这个可能是哪的原因!!
谢谢!

最新回复

我没有用过你的那个芯片,但是SDIO中断是卡的Pin8,也就是Data1。 在我用的三星的芯片寄存器里可以设置是否检测SDIO中断以及检测到SDIO中断后是否将SD中断置位。 根据文档来看,当SDIO产生中断,那么卡会拉低Data1产生低电平,那么控制器要把中断关掉,以避免一直 产生中断的情况发生。 要关中断根据文档可以将Data1的GPIO拉高。不过我看我这边的代码应该是将SD控制器中和SDIO中断的关联去掉, 也就是说SDIO产生Data1的低电平,但是控制器在响应了一次中断后将控制器中的对应位清0,这样SD控制器就不会产生 内部中断了。  详情 回复 发表于 2008-11-21 17:49
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
各位兄弟可要注意:小心自己的ID被封都没知是怎么回事,连个申诉的途径都没有,被封了连个判决书也没有?


各位看看下面这两个帖子!

http://topic.eeworld.net/u/20081118/15/5ade4cdf-3a30-4481-be9d-1b97b88cde48.html

http://topic.eeworld.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736


各位可以看看这位http://hi.eeworld.net/白夜花寒版主是如何的牛气冲天?

结果都不敢站出来说什么情况?

这位版主,除了删除人家留言,封人家ID,你还能干点别的不?就不能先提醒一下,如果提醒无效的情况下,再用别的方式不行啊?

好像跟当前部分领导处理事情的方式差不多吧,简单,粗暴!

哪位版主封的,站出来说明一下!

不会版主真的怕倒版吧?

本来移动平台人气就不旺,还有这样的版主随意封别人的ID,我看大家都不用为这里混了!

我就顺便帮他打个广告,看是不是还没人理!


顶!

我也顺便打个广告,本人也有支持ESRI ARCGIS的.shp文件的地图的Windows mobile 5.0/6.0手机GIS地图软件----移动GIS(MobileGIS),PC端的服务软件----移动GIS服务平台(MobileGISServer),可成套出售,可以完成以下功能:
1,通过GPRS上网连接后台服务端程序来实时传输在外工作的数据到后台数据库!

2,可以实时发回PDA的GPS信息,在后台地图上直接定位PDA用户的位置,也可以下发PDA的经纬度信息让PDA用户定位和跟踪其它PDA用户,了解自己与其它PDA的位置关系,起到定位和跟踪的作用!

3,可以发回PDA当前所在地名如在天河城附近等,实现在外面工作就知道在何时何地上班打卡的效果,同时可以在后台为相应的PDA用户设置固定时长返回一次当前位置的GPS信息确保对相应PDA用户的定位,跟踪与监控!

4,移动GIS服务平台可以对PDA用户进行登记,注销等管理,在移动GIS服务平台登记的PDA用户才可登陆此服务器,依据IMSI和IMEI号来进行登陆验证,安全可靠,

5,可以对在外面工作的PDA用户进行任务指派和任务管理如
  PDA号码:13800138000
  任务名称:测试线路
  任务说明:主要是在天河北路一带的地下管线进行检测!

6,(此功能为信息采集的核心功能)用户可自行设置需要采集信息的对象及其属性,指派给指定的PDA用户,如测试线路的属性模板:
    //0-编辑属性(可多个) ; 1-下拉属性(可多个) ; 2-选择属性(可多个) ; 3-大文本编辑框(可以没有此属性,但有此属性时只能有一个) ; 4-列表属性(可以没有此属性,但有此属性时只能有一个)(属性0+属性1+属性2/2+属性2%2) <=28
    name,名称,0,;beproject,所属项目,0,;type,类型,1,0:小-1:中-2:大;complete,完成,2,;remark,备注,3,;listbox,设备表,4,

7,可以实时上传文件到后台服务器,实时下载后台服务器的文件和实时更新PDA上客户端的系统!

8,可以实时采集和传输图像信息!

跟据您的需要,还可以增加其它功能!

QQ:546046182
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
各位:
  我的系统可以识别SD卡,读写都没有问题,
插上SD无线网卡也可以识别,也可以找到无线路由,可以设置,可以连接
但是问题是刚刚连接上就死机!!
请问各位这个可能是哪的原因!!
谢谢!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
初步判断是驱动问题. 可能有些设置没有搞好
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
[抗议]对硬件/嵌入开发的某些版主武断,简单,粗暴的执法方式表示严重的抗议!  
http://topic.eeworld.net/u/20081119/11/bda8bc5d-98d0-45ee-a1c1-86209d7f121d.html

各位再看看我刚才那个在硬件/嵌入开发版贴子已经被版主删除了,他是担心什么,还没有一会就直接删除,而且也没个通知说明一下,各位兄弟这里的版主是正直,但是做事的方式有欠妥,直得商榷,我不是说打广告对,我是说他直接封我ID,之前不说一下,之后不通知,感觉很郁闷!如果他提醒一下我一定停止发,他不说我以为这个可以发了,因为之前我是有准备哪个版主提醒一下我很快就不发,所以我才对他不提醒很气愤!


对版主处理问题武断,简单,粗暴的方式表示严重的抗议! 你看你只有也只能删除一下留言,封封几个不听话的ID,还能做点别的不?

此版主跟城管有得一比!

另外各位看看下面这两个帖子!

http://topic.eeworld.net/u/20081118/15/5ade4cdf-3a30-4481-be9d-1b97b88cde48.html

http://topic.eeworld.net/u/20081118/08/cf7d0af3-35cc-4fb7-9dc2-4567041b89e5.html?seed=1367941736


我开一贴他就删除一贴,他们怕什么,我只有以下两个要求:
第一,你把我的那个ID,解封了,
第二,我可以开贴道歉,以后不发广告贴,但是是哪位版主删除的,站出来说一下,然后就此武断,简单,粗暴的方式执法的行为进行道歉!

另外我那个ID在此已经四年了,从来没有任何不良记录,这次直接封,我表示严重的抗议,希望大版版主能就此事作个说明!

 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 KevinCEC 的回复:
初步判断是驱动问题. 可能有些设置没有搞好

请问是否有可能是中断问题!
我是用WINCE42的BSP移植到WINCE50
BSP并不支持KernelIoControl
所以分层的驱动中我把MDD中KernelIoControl去掉并直接赋的物理中断号
PDD中也有个中断我也是直接赋的物理中断号
现在可以检测到卡,并且SD卡可以识别,拷贝文件等
是不是可以理解为这两个中断没问题???
如果中断没问题的话,SD无线网卡传输数据就死机会不会是因为时钟的问题??
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
会不会你的中断一直在响应。在IST加上Debug信息看看是不是一直在响应中断。
之前碰到过这种infinite interrupt的问题。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
我参考的别的BSP做的SD卡的驱动,其中用到两个中断号,一个 是检测卡的,一个是 传输数据的

两个中断都是通过kernelIocontrol然后再跟事件关联的(原代码是这样)

现在因为我的BSP是从WINCE42升级到WINCE50的,BSP内部根本没用过kernelIocontrol,也不支持这个函数

所以我就直接把在WINCE42下的SD驱动去掉,重新做的SD驱动,但是这个新做的驱动应该用到kernelIocontrol的地方

我就直接把以前在WINCE42下用到的中断号赋值给kernelIocontrol相应的参数了,
如下:
以前的代码:
dwSDIOIrq = pHardwareContext->dwSDMMCIrq;  //从注册表读到的中断号
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwSDIOIrq, sizeof(DWORD), &(pHardwareContext->dwSysintrSDMMC), sizeof(DWORD), NULL))    //获得对应的逻辑中断号  
if (!InterruptInitialize (pHardwareContext->dwSysintrSDMMC,
                              pHardwareContext->hControllerInterruptEvent,  //申请的逻辑中断号与事件关联
                              NULL,
                              0))
现在我改为:去掉KernelIoControl这个函数
      在InterruptInitialize这个函数前面给pHardwareContext->dwSysintrSDMMC赋值
即pHardwareContext->dwSysintrSDMMC = SYSINTR_SDMMC ;(SYSINTR_SDMMC为我在WINCE42下用的中断号)
if (!InterruptInitialize (pHardwareContext->dwSysintrSDMMC,
                              pHardwareContext->hControllerInterruptEvent,  //申请的逻辑中断号与事件关联
                              NULL,
                              0))

现在的状态是可以触发中断检测到SD卡,并且可以对SD卡进行读写;可以检测到SD无线网卡(SD无线网卡提供驱动,我需要提供SDIO驱动),并且可以找到无线路由,可以设置,可以连接,但是连接上SD卡就死机,系统不死机
请问是不是我设置中断这出的问题!!谢谢!!


另外,从打印信息看这个程序一直在调用EmptyReceiveFifo这个函数,并且当我在这个函数内部加一条打印信息后,运行系统就会打印几万条打印信息,这时SD卡识别就非常慢,而且有时还出现死机的现象
而这个函数
EmptyReceiveFifo
在程序中被两个 地方调用1、HandleReceiveInterrupt 2、HandleTransferDone
其中HandleTransferDone时程序识别SD卡最后调用的,也就是调用这个函数HandleTransferDone后就进入正常状态识别出SD卡
而HandleReceiveInterrupt 函数是被总线程SDControllerIstThread调用的
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
你说的很像那种infinite interrupt的情况啊。你不确定那个函数调用了EmptyReceiveFifo函数可以在那两个函数中也加Debug信息不就知道了。我估计八成是在SDControllerIstThread里面调用的。
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

10
 
SDControllerIstThread调用了HandleReceiveInterrupt ,而HandleReceiveInterrupt 调用了EmptyReceiveFifo

看SDControllerIstThread的代码:
DWORD SDControllerIstThread(PSDH_HARDWARE_CONTEXT pHCDevice)
{
    DWORD waitStatus;    // wait status
    DWORD interrupts;    // current interrupts
   
        //RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:is running !\r\n")));
   
        if (!CeSetThreadPriority(GetCurrentThread(),
        pHCDevice->ControllerIstThreadPriority))
        { }
RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:go into while and WaitForSingleObject !\r\n")));
                       
    while(1)
        {
        waitStatus = WaitForSingleObject(pHCDevice->hControllerInterruptEvent, INFINITE);
        
        if (pHCDevice->DriverShutdown)
                {
                       return 0;
                }
                   // loop until all interrupts are serviced
        while (interrupts = GetMMCInterrupts(pHCDevice))
           {
            if (interrupts & MMC_IREG_TINT) {
                    // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_DAT_ERR)
                        {
                    // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_RES_ERR)
                        {
             // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_RD_STALLED)
                        {
                // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_SDIO_SUSPEND_ACK)
                        {
              // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_CLOCK_IS_OFF)
                        {
             // no one should be turning this on
                DEBUG_ASSERT(FALSE);
                    // mask the interrupt
                CLOCK_OFF_INTERRUPT_OFF(pHCDevice);
            }
           if (interrupts & MMC_IREG_END_CMD)
                        {
                     handleEndCommandInterrupt(pHCDevice);
            }
          if (interrupts & MMC_IREG_STOP_CMD)
                        {
                         DEBUG_ASSERT(FALSE);
            }
            
            if (interrupts & MMC_IREG_RXFIFO_REQ )
                        {
                 HandleReceiveInterrupt(pHCDevice);
            }

            if (interrupts & MMC_IREG_TXFIFO_REQ)
                        {
                 HandleXmitInterrupt(pHCDevice);
            }
            if (interrupts & MMC_IREG_PROG_DONE)
                        {
                HandleProgramDone(pHCDevice);
            }
                // DATA transfer done should be checked last so that the
                // HandleReceive and HandleTransmit
                // have a chance to finish copying from the fifos
            if (interrupts & MMC_IREG_DATA_TRAN_DONE)
                        {
               HandleTransferDone(pHCDevice);
            }

            if (interrupts & MMC_IREG_SDIO_INT)
                        {
                HandleSDIOInterrupt(pHCDevice);
            }
        }
#if 0
        if( pHCDevice->CurrentState == ReadDataTransfer )
        {
            if (!CLOCK_IS_ON(pHCDevice))
            {
                //DbgPrintZo(SDCARD_ZONE_WARN, (TEXT("CLOCK IS OFF during transfer!\n")));
                SDClockOn(pHCDevice);
            }
        }
#endif
        InterruptDone( SYSINTR_SDMMC);
         }

}
infinite interrupt这个情况请问要怎么解决?????
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

11
 
那要确认什么情况下会产生这种情况,
根据你的代码要么是在WaitForSingleObject,这个event pHCDevice->hControllerInterruptEvent一直被Set。
同时GetMMCInterrupts(pHCDevice)也确实有中断。但是这种情况下你的InterruptDone每次都会被调用到。

还有就是WaitForSingleObject只响应了一次,但是你的 while (interrupts = GetMMCInterrupts(pHCDevice))
一直为真,那么这种情况InterruptDone不会被调用到。

之后根据不同的情况来分析代码。看看是不是符合逻辑。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
那就是说第二种出现infinite interrupt的可能性大一些了

这个代码是public中自带的,我除了修改中断号外什么都没改过
以下是GetMMCInterrupts的代码,貌似这个跟中断号没什么关系
DWORD GetMMCInterrupts(PSDH_HARDWARE_CONTEXT pHCDevice)
{
    DWORD intr;
    DWORD interrupts;    // current interrupts
    DWORD interruptMask; // interrupt mask
    DWORD stat;
    //RETAILMSG(1, (TEXT("SDControl.c_GetMMCInterrupts:is running !\r\n")));
        // get interrupts
    intr = READ_MMC_REGISTER_DWORD(pHCDevice, MMC_IREG)
                 & MMC_IREG_INTERRUPTS;

    // get the interrupt masks so we know which ones we don't care about
        // the handlers will turn off (mask) interrupts
    interruptMask = (~(READ_MMC_REGISTER_DWORD(pHCDevice, MMC_IMASK)))
                    & MMC_IREG_INTERRUPTS;

        // mask it
    interrupts = intr & interruptMask;

    stat = pHCDevice->pSDMMCRegisters->stat;
                                    
    if( pHCDevice->fSDIOEnabled )
    {

    }
    return interrupts;
}
请指教!!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

13
 
我不确定是什么情况导致出现这种状况。你可以加信息验证。
而且Public下的代码并不一定是通用的。你可以参考但不是说拿来就直接能用。
如果说是跟GetMMCInterrupts(PSDH_HARDWARE_CONTEXT pHCDevice)有关,那么要去检查为什么会出现这种状况。
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 8 楼 gsymichael 的回复:
你说的很像那种infinite interrupt的情况啊。你不确定那个函数调用了EmptyReceiveFifo函数可以在那两个函数中也加Debug信息不就知道了。我估计八成是在SDControllerIstThread里面调用的。

gsymichael说的很对,我的卡就这样过,
还有就是你确定 while (interrupts = GetMMCInterrupts(pHCDevice))这个是原来给的吗,看着好怪呀。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
while (interrupts = GetMMCInterrupts(pHCDevice))
这个是这样的
路径在WINCE500\PUBLIC\COMMON\OAK\CSP\ARM\INTEL\PXA27X\SDHC\sdcontrol.c的主线程SDControllerIstThread中
前提是安装了Xscall的BSP包
CBEMA
这个问题最后你是怎么解决的??
就是象你说的在BSP中加入逻辑和物理中断号对应的方法就解决了吗??
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 14 楼 wangxin_801115 的回复:
while (interrupts = GetMMCInterrupts(pHCDevice)) //我的代码就没这句话这个是这样的
路径在WINCE500\PUBLIC\COMMON\OAK\CSP\ARM\INTEL\PXA27X\SDHC\sdcontrol.c的主线程SDControllerIstThread中 我用的是2410
前提是安装了Xscall的BSP包
CBEMA:
这个问题最后你是怎么解决的??
就是象你说的在BSP中加入逻辑和物理中断号对应的方法就解决了吗??基本上,如果你要求的是4G以上容量,还要处理一个命令响应,这个问gsymichael ,他很权威的哦!!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

17
 
我的SD卡是1G的可以识别

现在是想用SD无线网卡,不知道是不是数据量相当于4G的SD卡???

请两位赐教!
谢谢啦!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

18
 
通过打印信息看出:程序一直在主线程SDControllerIstThread中的while中一直运行
DWORD SDControllerIstThread(PSDH_HARDWARE_CONTEXT pHCDevice)
{
    DWORD waitStatus;    // wait status
    DWORD interrupts;    // current interrupts
        if (!CeSetThreadPriority(GetCurrentThread(),
        pHCDevice->ControllerIstThreadPriority))
        {
        }
    while(1)
        {
  RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:go into while and WaitForSingleObject !\r\n")));
        waitStatus = WaitForSingleObject(pHCDevice->hControllerInterruptEvent, INFINITE);
        
        if (pHCDevice->DriverShutdown)
                {
                  return 0;
                  }
                    // loop until all interrupts are serviced
        while (interrupts = GetMMCInterrupts(pHCDevice))
                {
            if (interrupts & MMC_IREG_TINT) {
                    // no one should be turning this on
                DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_DAT_ERR)
                        {
               DEBUG_ASSERT(FALSE);
            }

            if (interrupts & MMC_IREG_RES_ERR)
                { DEBUG_ASSERT(FALSE);
            }

            if (interrupts & MMC_IREG_RD_STALLED)
                        {
                DEBUG_ASSERT(FALSE);
            }
          if (interrupts & MMC_IREG_SDIO_SUSPEND_ACK)
                        {
               DEBUG_ASSERT(FALSE);
            }
            if (interrupts & MMC_IREG_CLOCK_IS_OFF)
                        {
                     DEBUG_ASSERT(FALSE);
                    // mask the interrupt
                CLOCK_OFF_INTERRUPT_OFF(pHCDevice);
            }
            if (interrupts & MMC_IREG_END_CMD)
                        {
                             HandleEndCommandInterrupt(pHCDevice);
            }
            if (interrupts & MMC_IREG_STOP_CMD)
                        {
                DEBUG_ASSERT(FALSE);
            }
             if (interrupts & MMC_IREG_RXFIFO_REQ )
                        {
             //RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:MMC_IREG_RXFIFO_REQ\r\n")));
                      HandleReceiveInterrupt(pHCDevice);
            }
            
            if (interrupts & MMC_IREG_SDIO_INT)
                        {
              //  RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:MMC_IREG_SDIO_INT\r\n")));
                HandleSDIOInterrupt(pHCDevice);
            }
        }
        InterruptDone( SYSINTR_SDMMC);
                    }
   RETAILMSG(1, (TEXT("SDControl.c_SDControllerIstThread:break while\r\n")));
}
果然如gsymichael 所料:
“根据你的代码要么是在WaitForSingleObject,这个event pHCDevice->hControllerInterruptEvent一直被Set。
同时GetMMCInterrupts(pHCDevice)也确实有中断。但是这种情况下你的InterruptDone每次都会被调用到。”
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 
打印了N条这个信息:SDControl.c_SDControllerIstThread:go into while and WaitForSingleObject
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

20
 
也就是说你的WaitForSingleObject(pHCDevice->hControllerInterruptEvent, INFINITE);
不停的会等到对应的事件。
那你到代码中去搜索一下什么地方会去Set pHCDevice->hControllerInterruptEvent这个事件。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表