当前位置:首页 >> 信息与通信 >>

基于SIM900实现SIM卡上网


基于 SIM900 实现 SIM 卡上网 ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi) 时间:2010.06.13 类别:WINCE 驱动开发 ********************************LoongEmbedded******************************** 1. 硬件环境 CPU:S3C2443X GPRS 模块:SIM900 CPU 和 SIM900 的物理端口连接如下: GPH0 -------------TX GPH1 -------------RX GPH8 -------------CTS GPH9 -------------RTS GPF6 -------------DCD GPE13 -------------DSR GPF4 -------------通过中间模拟电路再连接到 SIM900 的供电引脚 GPG13 -------------POWERKEY GPL9 -------------RESET 相关电路图如下:

1

2. 软件环境 WINCE6.0 3. 实现 3.1 串口驱动相关实现 ⑴ 在 ser_smdk2443.cpp 文件的 CreateSerialObject 函数中加入下面关于 GPRS 的内容 CSerialPDD * CreateSerialObject(LPTSTR lpActivePath, PVOID pMdd,PHWOBJ pHwObj, DWORD DeviceArrayIndex) { CSerialPDD * pSerialPDD = NULL; RETAILMSG( TRUE, (TEXT("DEBUG: CreateSerialObject %d\r\n"), DeviceArrayIndex)); switch (DeviceArrayIndex) { case 0: ///< UART0: GPRS pSerialPDD = new CPdd2443Serial0(lpActivePath,pMdd, pHwObj); break; case 1: ///< UART1: debug,GPRS_DEBG pSerialPDD = new CPdd2443Serial1(lpActivePath,pMdd, pHwObj); break; case 2: ///< UART2: GPS pSerialPDD = new CPdd2443Serial2(lpActivePath, pMdd, pHwObj); break; case 3: ///< UART3:bluetooth pSerialPDD = new CPdd2443Serial3(lpActivePath, pMdd, pHwObj); break; } if (pSerialPDD && !pSerialPDD->Init()) { delete pSerialPDD; pSerialPDD = NULL; } return pSerialPDD; } ⑵在类 CPdd2443Serial0 的定义中假如下面内容用于 UART0 和 SIM900 的 TX/RX 建立物理 连接,本设计不使用硬件流控,所以 RTS 和 CTS 端没有配置为相应的功能端口 class CPdd2443Serial0 : public CPdd2443Uart { ………………… virtual BOOL Init() { …………………………………… m_pIOPregs->GPHCON &= ~(0x3<<0 | 0x3<<2 ); m_pIOPregs->GPHCON |= (0x2<<0 | 0x2<<2 ); m_pIOPregs->GPHUDP |= (0x2<<(0) | 0x2<<(2)); m_pIOPregs->GPHUDP &= ~(0x2<<(16) | 0x2<<(18));

2

m_pDTRPort = (volatile ULONG *)&(m_pIOPregs->GPFDAT); m_pDSRPort = (volatile ULONG *)&(m_pIOPregs->GPGDAT); m_dwDTRPortNum = 0; m_dwDSRPortNum = 3; ……………………………………………….. return CPdd2443Uart::Init(); } return FALSE; }; ………………………………………………. }; ⑶ 串口驱动相关注册表,采用 COM3 ;===============GPRS: UART0 (physical COM3 connector P1) (Serial) COM3=============== [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial1] "DeviceArrayIndex"=dword:0 "Irq"=dword:1c "MemBase"=dword:50000000 "MemLen"=dword:30 ;; 2c "InterruptBitsShift"=dword:0 ; UART 0 Interrupt Sub Register shift bit. "ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status. "Prefix"="COM" "Index"=dword:3 "Dll"="serial_smdk2443.dll" "Order"=dword:0 "Priority"=dword:0 "Port"="COM3:" "DeviceType"=dword:0 "FriendlyName"="GPRS COM3" "Tsp"="unimodem.dll" "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}" "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

3.2 对 SIM900 模块的时钟及 IO 口控制 这部分的控制需要根据 SIM900 的 datasheet 的具体描述来控制。 ⑴我在 OEMInit() ConfigureGPIO()中加入如下控制代码 /****************************************kandi start***************************************/ //////////////////3G/////////////////////////// #ifdef MX500B

add

3

//threeG_GPIO4=1,normal mode:RF is working s2443IOP->GPLCON &= ~(0x3<<12); s2443IOP->GPLCON |= (0x1<<12); s2443IOP->GPLUDP &= ~(0x3<<12); s2443IOP->GPLDAT |= (0x1<<6); #endif //////////////////////////GPRS/////////////////////////// //GPRS_DCD s2443IOP->GPFCON &= ~(0x3<<12); s2443IOP->GPFCON |= (0x1<<12); s2443IOP->GPFDAT &= ~(0x1<<6); //GPRS_DSR s2443IOP->GPECON &= ~(0x3<<26); s2443IOP->GPECON |= (0x1<<26); s2443IOP->GPEDAT &= ~(0x1<<13); //GPRS_CTS s2443IOP->GPHCON &= ~(0x3<<16); s2443IOP->GPHCON |= (0x1<<16); s2443IOP->GPHDAT &= ~(0x1<<8); //GPRS_RTS s2443IOP->GPHCON &= ~(0x3<<18); s2443IOP->GPHCON |= (0x1<<18); s2443IOP->GPHDAT &= ~(0x1<<9); //EN_GPRS s2443IOP->GPFCON &= ~(0x3<<8); s2443IOP->GPFCON |= (0x1<<8); s2443IOP->GPFDAT |= (0x1<<4); //GPRS_POWERKEY s2443IOP->GPGCON &= ~(0x3<<26); s2443IOP->GPGCON |= (0x1<<26); s2443IOP->GPGUDP &= ~(0x3<<26); s2443IOP->GPGDAT &= ~(0x1<<13); #ifdef MX500B //threeG_RESET s2443IOP->GPLCON &= ~(0x3<<10); s2443IOP->GPLCON |= (0x1<<10); s2443IOP->GPLUDP &= ~(0x3<<10);

4

s2443IOP->GPLDAT |= (0x1<<5); for(i=0;i<20;i++) { i=i; } s2443IOP->GPLDAT &= ~(0x1<<5); OALMSG(1, (L"OEMInit kandi test 1111\r\n")); #else //GPRS_RESET s2443IOP->GPLCON &= ~(0x3<<18); s2443IOP->GPLCON |= (0x1<<18); s2443IOP->GPLUDP &= ~(0x3<<18); s2443IOP->GPLDAT |= (0x1<<9); for(i=0;i<20;i++) { i=i; } s2443IOP->GPLDAT &= ~(0x1<<9); OALMSG(1, (L"OEMInit kandi test 22222\r\n")); #endif ⑵在 CMC.dll 驱动增加下面内容 因为我们的产品很多是通信模块,故创建 cmc.dll 来对 GPS、GPRS、3G、RFID 和 BT 等模 块进行控制, CMC_Init() CmcGPIOInit()加入如下内容来满足 3G 模块和 SIM900 模块时 在 序的要求 #ifdef MX500B //threeG_RESET v_pIOP_CMC_regs->GPLDAT |= (0x1<<5); RETAILMSG(CMC_DEBUG_MESSAGE, (L"CmcGPIOInit kandi test 1111\r\n")); #else //GPRS_RESET v_pIOP_CMC_regs->GPLDAT |= (0x1<<9); Sleep(1000); v_pIOP_CMC_regs->GPGDAT |= (0x1<<13); RETAILMSG(CMC_DEBUG_MESSAGE, (L"CmcGPIOInit kandi test 222222\r\n")); #endif 4. 注意的问题 ⑴因为我们的系统没有使用硬件流控的方式,所以在 WINCE 自带的控制面板下,新建一个 连接的时候,流控方式也必须选为“none”

5

5.

6


相关文章:
SIM900A GSM 模块使用
SIM900A GSM 模块使用_信息与通信_工程科技_专业资料。基于51单片机的GSM 模块...GSM 1. 电话卡和信号 2. 产生通信费用 3.SIM900A 串口通信的 GSM 模块 AT...
GSMGPR基于SIM900A的应用与实现_图文
通” ,取一部手机行遍全球之意,其实现手段为全球使用同一个 移动电话网络标准...11 天线 SIM卡 防静电 串口 SIM900A 单片机 电源图 3.2 硬件系统设计功能...
GSMGPR基于SIM900A的应用与实现_图文
GSMGPR基于SIM900A的应用与实现_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载GSMGPR基于SIM900A的应用与实现_计算机软件及应用_IT/计算机_专业...
SIM300_SIM900调试心得
在一个问题就是你的卡虽然支持 GPRS,但是不代表就一定能实现你的数传模式。 ...GSMGPR基于SIM900A的应用... 26页 2下载券 sim300指令总结与单片机... 4页...
SIM900_基站定位调试笔记
SIM900_基站定位调试笔记_计算机软件及应用_IT/计算机_专业资料。这是带基站定位..."CMNET" //SIM 卡一定要开通 GPRS 功能 3、AT+SAPBR=1,1 //激活 4、AT...
SIM900A发送数据参考流程
SIM900A发送数据参考流程_计算机硬件及网络_IT/计算机_专业资料。AT+CREG? +CREG: 1,1 OK AT+CGATT? +CGATT: 1 查询网络注册信息 查看是否附着 GPRS 业务 0...
SIM900A模块-单片机
软件部分通过 KeilC 软件进行编程,实现棉蚜快速监测装置的远程控制。 基于 SIM900A 的农业远程控制系统通过用户手机向 GSM 网络发送短信,接收 用户机的控制命令对...
SIM900A各功能指令
SIM 卡未满的时候, SIM900A 模块会返回数据给...否则无法实现通信,推荐在 ADSL 网络下进行测试, 并...2.7.1 TCP 连接 TCP 是基于连接的协议,在收发数据...
基于SIM900A的GSM远程监控系统设计_图文
龙源期刊网 http://www.qikan.com.cn 基于 SIM900A 的 GSM 远程监控系统设计 作者:王明新 来源:《电脑知识与技术》2014 年第 15 期 摘要:为实现对设备的...
SIM900A调试方法
SIM900A 调试方法 使用电脑控制的方法在教程中有详细的介绍, 使用 USB 设备将...如果不方便通过电脑测试模块的话,可以将手机卡和电源接好,向模块中的电话号拨 ...
更多相关标签: