len524

    1.                                  唯一id防破解(或者我称的反拷贝),虽然也可以不需要编程器的支持,但是有编程器的支持,会更方便。 我还可以提供这方面的技术服务(收费的)。
    2. 关于STM32F系列IO管脚读写速度问题 8/6539 stm32/stm8 2010-09-09
                                       是不是指如果設置成50M時,準位上升和下降都會比較陡,容易產生比較大的干擾?
    3. ewb电路仿真应注意什么 4/3293 嵌入式系统 2010-06-30
      xawgiudf9ew
    4. 关于WINCE5.0 ActiveSync 问题 6/4757 嵌入式系统 2010-06-28
      怎么没有人给我回复呀,还望大家多多指点。
    5. usb充电与系统供电电路设计 6/4218 嵌入式系统 2010-06-20
      很简单, 有USB时,USB负责充电和对系统供电, 无USB时,电池对系统供电。 好象有对这方面的讨论,也有此具体的电路,你可以查一下
    6. i2s驱动负责做什么 10/6188 嵌入式系统 2010-05-31
      谢谢大家,在此谢过
    7. 急问:键盘驱动打不开 11/4721 嵌入式系统 2010-05-24
      名字错,hFile=CreateFile(TEXT("KEY:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0); 中的"KEY:"不合法,这个名字应该写成"KEY1:"
    8. 270的SD卡驱动初始化 4/3640 嵌入式系统 2010-05-15
      没弄过 帮顶
    9. 有点奇怪的问题 10/4556 stm32/stm8 2010-05-10
                                       
      电源引脚焊接有问题! 唉!有这个问题客户,我已经记不清是第几个了!
      受教了,以前碰到过同一版电路,一块好的,一块现象同楼主,也没去深究,直接归类为焊接问题,看来也没归错,哈哈
    10. Launch函数问题,高手请进 9/4461 嵌入式系统 2010-03-15
      引用 5 楼 sailorlyq 的回复: [0xe3a03205] mov r3,#0x50000000 do you think this command is proper? i think 0x50000000 is too long for the command "mov" what simulator do you use?
      看他的说明mov r3,#0x50000000是由编译器产生的,源代码是用的LDR,但是不清楚为什么这里会变成MOV。
    11. STC单片机编程出错是啥原因? 13/6084 嵌入式系统 2010-03-15
      STC89C52RC的eeprom不是很大吧,我用的是stc11f16xe,有32k的eeprom,32x32的点阵字大约可以放200个。我也正在做点阵屏的东西。不知道楼主的点阵字模数据准备从哪里获得,用现成的字模提取软件还是需要从上位机下载到单片机。STC89C52RC的指令周期只比普通51快了一倍而已,晶振倒是可以提高不少,但总的来说速度还不如stc11f系列的。还有,stc的eeprom读写需要注意跨扇区的问题,因为一个扇区只有512字节。另外,当时我没有选片外的i2c总线的eeprom,感觉速度比片内的eeprom(其实对于stc的片子,就是flash rom)会慢不少,毕竟i2c是一位一位传输的。
    12. 28335的烧写 9/6729 微控制器 MCU 2010-03-10
      我也出现的这个问题,以前可以烧写测试版的芯片,但是正式版的烧写不了,装了个28335flash烧写的程序F2823x_RevA_CSP.exe,就可以了。。。
    13. 内存分配存储问题 3/2627 嵌入式系统 2010-02-08
      引用 1 楼 rushonin 的回复: 整个wince系统都是32位地址啊。 数据可以有很多种类型,你读写8位的数据,就是向一个32位的地址读写一个BYTE的值。
      恩,谢谢,但是我给标明寄存器地址的那个物理地址分配内存的时候,却只能用8位的,一旦用32位,就写不进任何东西,这又不知道为什么
    14. ATMEL公司AT91SAM9263开发板求助 16/5749 嵌入式系统 2010-01-15
      找开发板的技术支持吧,买他们的开发板不可能说卖完就完事了;其实,买板子主要看技术支持好不好,如果太次那就不值得买…
    15. wince6.0 应用程序直接 操作nandflash 问题 6/3726 嵌入式系统 2010-01-11
      不可能你程序的运行层就不在驱动那一层,怎么加他的驱动?
    16. 请问如何将hive-based机制在CF卡上运行? 12/5862 嵌入式系统 2010-01-08
      請問 PB裡的ATAPI driver 在 flatform.reg 的位置是?? 我找不到! 感激
    17. Wince6.0 SDIO移植---- 缺少SD补丁??? 10/5207 嵌入式系统 2009-12-23
      我只打了2008 年全年包,没有楼主所说的问题,呵呵。
    18. 入门问题 8/2993 嵌入式系统 2009-12-15
      帮顶
    19. 摘要:介绍了一种在微控制器(单片机)上实现PPP协议,并使其通过ISP连入Internet的方法。分析了PPP协议,论述了软件系统的层次结构和实现难点,重点介绍了协议的简化方法以适应单片机有限的存储资源。     关键词:PPP 微控制器 单片机上网 调制解调器 微控制器(也称单片机)把所有常用的资源,如存储器、模数转换器、通用输入输出口、定时器 等,与CPU集成在一个芯片上,具有体积小、功耗低、使用方便的特点,广泛应用于各种嵌入式系统中。随着互联网(Internet)的兴起与普及,使微控 制器也接入到互联网,并通过互联网传送数据。便是实现单片机与互联网通信的前提是需要在单片机上实现多种繁杂的互联网协议。而微器一般处理能力较低、程序 存储器和数据存储器资源有限,这就使微控制器上网变得非常困难。目前,一般采用微控制器直接驱动网卡芯片的方案。网卡芯片封装了底层的以太网协议(如 IEEE802.3),微控制器只需控制网卡芯片并实现传输层与网络层协议(例如TCP、IP协议)即可以上层。但其缺点是必须应用在已经拥有局域网的地 方,且网卡芯片(例如RTL8019等)价格不菲。 本文针对微控制器上网的问题,提出一种大微控制器中实现PPP协议,并通过调制解调器 (MODEM)连接到ISP(Internet Service Provider)实现上网的解决方案:微控制器控制MODEM拨号连接到ISP上,然后根据PPP协议(Point to Point Protocol)进行通信协商、密码认证等握手过程,如果成功就可以通过ISP上网传送数据。这种方案的优点在于:(1)可以应用于任何覆盖电话网的地 区,适用于广大偏远地区;(2)硬件实现比较简单,程序比较短小;(3)只需外接电话线,安装简便。 1 硬件连接与底层驱动 微控制器拨号上网解决方案中的硬件连接非常简单,只需使用微控制器的标准串行口和I/O总 线与MODEM相连。为了使程序更为简化,在硬件设计中可以不使用MODEM的硬件握手信号。最终只需四根连接线来控制MODEM(如图1所示):串口发 送(TXD)、串口接收(RXD)、载波检测CD(Carrier Detect)和终端准备DTR(Data Aerminal Ready)信号。CD信号可以检测MODEM是处于数据传送状态还是AT命令传送状态。DRT信号用来通知MODEM传送工作已经结束。微控制器的串行 口和I/O口不能直接与标准MODEM相连,需要使用电压转换芯片,如MAX232等,转换为RS232标准。 为了方便软件编程,需要针对硬件编写一些底层驱动程序。首先是串行口的驱动函数:打开串口 (OpenComm)、关闭串口(CloseComm)、读串口数据(ReadComm)、写串口数据(WriteComm)等。然后在这些串口函数的基 础上编写MODEM的驱动函数。单片机通过串行口控制MODEM,进行拨号、设置等操作。控制方法采用AT命令,例如:ATDT命令用来拨号、ATV命令 控制MODEM返回值的格式等。控制MODEM拨打ISP的电话号码后,MODEM就转入在线模式(On-Line),此时微控制器向串行口发送的所有数 据都会直接传送给ISP主机。同样ISP主机的回答也传回微控制的串行口。可以说此时的MODEM和电话线建立了一个从微控制器到ISP的透明数据连接。 当数据传送完成需要断开连接时,微控制器通知MODEM结束会话,并从在线模式转回普通的命令模式。这可以通过置高MODEM的DTR线完成。同时,处于 在模式下微控制器也要不断检测CD线是否处于高电平,当线路由于异常断开时,CD线会回复到平常的低电平。根据这些操作,编写MODEM驱动函数: (1)MODEM初始化函数(ModemInit);(2)拨号函数(ModemDial);(3)断开与ISP连接(ModemHangUp);(4) 检测MODEM是否处于在线状态(ModemOnLine)等。 这些底层的驱动函数将会使上层协议的编写很方便;更重要的是,它提供了一个硬件抽象层。当底层硬件改动时,只需要对底层的驱动数改动,而上层函数的代码不变。 2 软件整体结构 2.1 软件层次结构 程序中的所有代码都由C语言编写,采用分层结构,从底到上分别为:串口驱动层、MODEM 驱动层、PPP协议层、IP协议层、UDP协议层与应用层。上层函数的实现需要应用到底层函数,而底层函数的任务就是为上层函数提供服务,最终完成应用层 任务,传送数据。各层的主要函数如图2所示。 可以看出,为了尽量简化,在传输层使用了UDP协议而非TCP协议。其实大多数情况下使用无线连接的UDP协议已经足够,而且会使程序大幅简化。 2.2 串口接收中断的处理 为了节省代码空间,软件未使用实时操作系统,例如μC/OS等, 而是利用多个有了状态机来控制程序的运行。其中最重要的就是MODEM状态机。MODEM可以处在两个状态:命令状态和在线状态。当处于命令状态时,串行 口接收MODEM的返回值信息。而当微控制器进行拨号命令之后,MODEM转而处于在线状态,此时微控制器与ISP直接连接,它们之间的通信要符合PPP 报文协议。因此,串行口接收的是PPP报文。在本程序中,串口使用中断接收模式,因此在串口接收中断处理函数中,首先要判断MODEM是处于命令状态还是 在线状态。如果处于在线状态,则要按照PPP报文格式处理。找到一个完整的PPP报文后则通知主循环处理。中断处理程序的总体结构如下: void serial0() interrupt 4 using 2 {//串行口中断处理函数 unsigned char c; EA=0; if(RI) { RI=0; c=SBUF;//获得串口数据 if(ModemState==COM) ProModemCommand(c);//处于命令状态 Else ProPPPReceive(c);//处于在线状态,寻找完整的PPP报文 } } 3 PPP协议的实现 PPP(Point to Point Protocol)是数据链路层协议中的一种,是目前应用最广的一种广域网协议。PPP协议假定两个对等实体间有一个双向全双工的连接,而且数据包按顺序 投递,这正好符合串行口的通信方式。PPP协议不需要差错控制、排序和流量控制,易于实现,而且支持对多种高层协议(如IP、TCP、UDP)的复用。所 以使用PPP拨号上网是微控制器实现Internet连接的最佳选择。大部分的ISP也正是通过PPP协议提供网络服务的。 PPP协议的帧结构如图3(a)所示。串口中断程序以包起始和结束符来判断是否有完整的 PPP包,并对PPP包的内容进行校验以确定数据包的完整性和正确性。然后在主循环中进入PPP报文解板模块,在护号后初次与ISP通信阶段,系统首先要 与ISP进行通信链路的协商,即协商点到点的各种链路参数配置。协商过程遵守LCP(Link Control Protocol)、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等协议。其中LCP协议用于建立、构造、测试链路连接;PAP协议用于处理密码验证部分;IPCP协议用于设置网络协议环境,并分配 IP地址。协商机制用有限状态机模型来实现。一旦协商完成,链路已经创建,IP地址已经分配就可以按照协商的标准进行IP报文的传输了。根据应用的不 同,IP报文中可以携带UDP报文也可以是TCP或ICMP报文。本系统正是采用UDP报文传送数据信息的。数据传输完成后,下位机会向ISP发送LCP 的断开连接报文以终止网络连接。 值得注意的是,PPP报文、LCP、PAP、IP报文与UDP报文是互相嵌套的。即PPP 报文中嵌入了IP报文和LCP、PAP等报文,而IP报文中嵌入了UDP报文。当PPP报文的协议符为0021时表示嵌入了IP数据报,当C021时表示 嵌入LCP数据报,而为C023表示嵌入PAP数据报。PPP报文的基本解析过程如图3(b)所示。 3.1 登录ISP的协议协商过程 系统的难点之一是微控制器登陆ISP并与IISP的协商过程,其中需要应用到LCP、 PAP与IPCP协议。LCP、PAP与IPCP协议的帧结构大同小异,最常用的是请求(REQ)、同意(ACK)和拒绝(NAK)三种帧。微控制器与 ISP协商时,任何一方都可以发送REQ帧请求某方面的配制,另一方如果觉得配置不能接受会回应NAK帧,如果可以接受则回应ACK帧。为了节省资源,这 里只处理这三种数据帧,其它链路问题都由微控制器在程序控制下自己重新拨号解决。各种配置选项协商好以后,PPP才可以成功登陆。 在拨号成功连接后,ISP首先返回一个PAPREQ数据帧,微控制器发送一个空LCP REQ帧以强迫ISP进行协议协商阶段;随后ISP发送LCP设置帧,微控制器拒绝所有的设置并请求验证模式。ISP选择CHAP或PAP方式验证,这里 只接受PAP方式。然后进行PAP验证用户名和密码过程,如果成功,ISP会返回IPCP报文设置IP地址。此时,就完成了与ISP的协商过程,可以通过 向ISP发送IP报文的方式连接互联网传送数据了。协商过程的状态转换图如图4所示。     3.2 IP与UDP报文的解析 协商完成后进入IP数据报通信阶段。此时,微控制器向ISP发送的所有包含IP报文的PPP报文都会被ISP传送给IP报文内的相应IP地址,而远端所有向微控制器IP地址发送的报文也都会经ISP传送到单片机,从而完成微控制器与远程主同通过互联网的数据传输。 为了使程序尽量简化,选用IP承载UDP协议发送数据。在程序中实现IP与UDP报文的数 据结构,向指定的主机IP地址发送UDP报文较易实现。但应注意,在应用层需要用户实现自己的协议。例如对于远程读表系统,要规定仪表的数据传输协议;根 据协议把相应的仪表数据放入UDP报文中,传给主机;同时,主机也可以按照协议向单片机发送UDP报文。可以利用UDP报文的端口号,把不同的报文发送到 不同的端口中以方便单片机的解析。 经过优化,本系统的软件代码可以精简到6K字节左右,共使用不到300字节的数据存储器。 由于程序使用C语言编写,稍加改到就可以在各种系列的微控制器上实现。微控制器通过MODEM拨号上网技术,可以广泛应用于需要远程传送数据的系统中,特 别适合远程秒表、远程监控等领域。 ATD*99***1#后,会收到一大堆数据,这是服务器发来的PPP协议请求,详细如下: R: read   W: Write R: 7E FF 7D 23 C0 21 7D 21 7D 23 7D 20 7D 3D 7D 21 7D 24 7D 27 D0 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22   7D 25 7D 26 BB 6A E4 93 7D 23 7D 25 C2 23 7D 25 34 89 7E W: 7E FF 7D 23 C0 21 7D 21 7D 21 7D 20 7D 37 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 25 7D 26 7D 20 4E 9B 7D 31 7D 27 7D 22 7D   28 7D 22 7D 2D 7D 23 7D 26 8F 7D 26 7E R: 7E FF 7D 23 C0 21 7D 24 7D 21 7D 20 7D 27 7D 2D 7D 23 7D 26 86 32 7E W: 7E FF 7D 23 C0 21 7D 21 7D 22 7D 20 7D 34 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 25 7D 26 7D 20 4E 9B 7D 31 7D 27 7D 22 7D   28 7D 22 C3 7D 3E 7E R: 7E FF 7D 23 C0 21 7D 22 7D 22 7D 20 7D 34 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 25 7D 26 7D 20 4E 9B 7D 31 7D 27 7D 22 7D   28 7D 22 28 77 7E R: 7E FF 7D 23 C0 21 7D 21 7D 23 7D 20 7D 3D 7D 21 7D 24 7D 27 D0 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22   7D 25 7D 26 BB 6A E4 93 7D 23 7D 25 C2 23 7D 25 34 89 7E W: 7E FF 7D 23 C0 21 7D 22 7D 23 7D 20 7D 3D 7D 21 7D 24 7D 27 D0 7D 22 7D 26 7D 20 7D 2A 7D 20 7D 20 7D 27 7D 22 7D 28 7D 22   7D 25 7D 26 BB 6A E4 7D B3 7D 23 7D 25 C2 23 7D 25 76 8A 7E 可根据 7d ** ==>**异或0x20 7d 5d ==> 7d 7d 5e ==> 7e 进行转换 *****转换转义字符后***** R: 7E FF 03 C0 21 01 03 00 1D 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 BB 6A E4 93 03 05 C2 23 05 34 89 7E   W: 7E FF 03 C0 21 01 01 00 17 02 06 00 0A 00 00 05 06 00 4E 9B 11 07 02 08 02 0D 03 06 8F 06 7E   R: 7E FF 03 C0 21 04 01 00 07 0D 03 06 86 32 7E W: 7E FF 03 C0 21 01 02 00 14 02 06 00 0A 00 00 05 06 00 4E 9B 11 07 02 08 02 C3 1E 7E   R: 7E FF 03 C0 21 02 02 00 14 02 06 00 0A 00 00 05 06 00 4E 9B 11 07 02 08 02 28 77 7E   R: 7E FF 03 C0 21 01 03 00 1D 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 BB 6A E4 93 03 05 C2 23 05 34 89 7E W: 7E FF 03 C0 21 02 03 00 1D 01 04 07 D0 02 06 00 0A 00 00 07 02 08 02 05 06 BB 6A E4 93 03 05 C2 23 05 76 8A 7E ***************************************** 协议的内容分别是 7E (ppp头) FF 03 C0 21(LCP)  01(代码) 03(标识符) 00 1D(长度,16进制) 01(类型) 04(长 度) 07 D0(协商内容,Maximum-Receive-Unit) 02(类型) 06(长度) 00 0A 00 00 (协商内容,我也想知 道协商什么,但是RFC1661上面没说)07(类型,协议压缩协商) 02(长度) 08(类型,地址,控制域压缩协商) 02(长度) 05(类 型) 06(长度) BB 6A E4 93(内容,Magic-Number) 03(类型) 05(长度) C2 23(CHAP,挑战握手验证协 议) 05(MD5算法) 34 89 (FCS,校验和)7E(PPP包尾) ***************************************** R: 7E C2 23 01 01 00 19 14 28 7D 33 4B C8 82 71 8D CE 2B 9E 1E A2 24 9A FD 46 6B 65 2C B8 5D D3 7E  //CHAP 协议,使用MD5算法运算,具体参看 RFC1994 RFC1321 W: 7E C2 23 02 01 00 15 10 89 AE AD D2 F4 AF CC 8D 9A FC CA 54 21 D8 B5 8C CF A4 7E R: 7E C2 23 03 01 00 04 C2 ******下面是IPCP协议********************* W: 7E 80 21 01 01 00 28 02 06 00 2D 0F 01 03 06 00 00 00 00 81 06 00 00 00 00 82 06 00 00 00 00 83 06 00 00 00 00 84 06 00 00   00 00 97 4C 7E W: 7E 80 3F 01 01 00 9C 01 8A 5A 48 45 4E 59 55 20 20 20 20 20 20 20 20 20 00 01 48 41 52 44 20 20 20 20 20 20 20 20 20 20 20   00 02 5A 48 45 4E 59 55 20 20 20 20 20 20 20 20 20 03 01 5A 48 45 4E 59 55 20 20 20 20 20 20 20 20 20 20 01 48 41 52 44 20 20   20 20 20 20 20 20 20 20 20 1E 02 D5 F3 D3 EA 20 20 20 20 20 20 20 20 20 20 20 03 01 48 41 52 44 20 20 20 20 20 20 20 20 20 20   20 1D 01 01 02 5F 5F 4D 53 42 52 4F 57 53 45 5F 5F 02 01 02 02 0E 00 07 00 04 00 00 5A 48 45 4E 59 55 E2 0B 7E R: 7E 80 21 04 01 00 16 02 06 00 2D 0F 01 82 06 00 00 00 00 84 06 00 00 00 00 AC D2 7E W: 7E 80 21 01 02 00 16 03 06 00 00 00 00 81 06 00 00 00 00 83 06 00 00 00 00 BA 12 7E R: 7E FF 03 C0 21 08 04 00 A2 80 3F 01 01 00 9C 01 8A 5A 48 45 4E 59 55 20 20 20 20 20 20 20 20 20 00 01 48 41 52 44 20 20 20   20 20 20 20 20 20 20 20 00 02 5A 48 45 4E 59 55 20 20 20 20 20 20 2
    20. stm8指令执行周期需要几个系统时钟? 27/19820 stm32/stm8 2009-11-13
                                       看看STM8的汇编,它的执行效率是 Cycles为单位的。 而AVR等是以CLOCKS为单位的。 AVR标称的是1个时钟脉冲一条指令执行效率。(最高) 认真看看,STM8是0.75  MPS ,就是0.75百万条指令每秒;这样计算就是1.333个时钟一条指令。 也可以这样理解。增强型的8051(没有流水线)是4个CLOCKS一条指令(最高),而STM8是三级流水线 结构, 4/3=1.3333 CLOCKS, 也就是0.75MPS(百万条指令每秒). 因此Cycles是机器周期,普通51的是12 CLOCK,增强型的51是4 CLOCK, AVR的 机器周期是1 CLOCK. 而STM8的就是1.3333 CLOCK= 1 Cycle 同等的AVR 但周期指令,都比STM8快大约25%-30%

最近访客

< 1/1 >

统计信息

已有79人来访过

  • 芯积分:--
  • 好友:--
  • 主题:9
  • 回复:69

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言