摘要: 引 言 控制器局域网CAN是一种用于连接汽车和工业场合中电子控制模块、传感器和执行器的串行、多主通信规范。由于CAN总线具有很强的纠错能力、支持差分收发、传输距离远等特点,因此CAN总线用途非常广泛,现已成为工业数据通信领域的主流技术、基础技术,目前比较流行的TTCan,DeviceNet,CANo-pen,SAE J1939等规范均是以CAN为基础的,因此对CAN总线的深入研究是十分必要的。在CAN规范中,位定时和同步机制是既重要又难于理解的环节之一,它不仅关系到对波特率、总线长度等相关内容的理解,甚至对节点开发的成功与否产生直接的影响。然而,目前相关文献均缺乏针对CAN总线位定时和同步机制 阅读全文
posted @ 2011-10-14 09:58 重归混沌 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 搞了这么久USB了,还是不知道DATA0,DATA1的最大包长,以及端点描述符中的最大包长与68013的端点缓冲区有什么关系,经过二小时的奋斗得出如下结论: 1.DATA0或DATA1实际上就是一个端点描述符中的最大包长。换句话说,68013发一次数据包就是一个DATA0或 DATA12.微帧是用来作为传输时间基准的。在每个微帧间可以传一到多次DATA0/DATA1,但是根据DATA0/DATA1(也就是68013一次发送的数据的长度)的大小,每个微帧之间可以传送DATA数据包的个数也不同,DATA0/DATA1越大,每个微帧之间能传输的DATA的数据包的个数越少。3.在... 阅读全文
posted @ 2011-10-06 10:18 重归混沌 阅读(1041) 评论(0) 推荐(0) 编辑
摘要: 今天看CY7C68013开发手册时,突然想起,在USB接口描述符中有一个bAlternateSetting字段一直没用过,花了一上午时间也没找到相关资料!就在快中午时突然看到一句话:“bAlternateSetting用于在同一个接口中的多个描述符中进行切换".一下子感觉抓住要点了。经过百度及查阅USB specification2.0得出如下结论: 在USB协议中同一个配置中的不同接口不能共用端点。 同一个接口可以有多个接口描述符,用bAlternateSetting来识别. 同一个接口的不同接口描述符,可以拥有相同的端点。 同一个接口中的不同描述符可以像其他接口描述符... 阅读全文
posted @ 2011-10-05 12:05 重归混沌 阅读(1433) 评论(0) 推荐(0) 编辑
摘要: 复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。 复位电路: 当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。常用的上电复位电路如下图A中左图所示。图中电容C1和电阻R1对电源十5V来说 阅读全文
posted @ 2011-10-04 21:10 重归混沌 阅读(1053) 评论(0) 推荐(0) 编辑
摘要: USB协议的第9章讲到USB可见设备状态[Universal Serial Bus Specification, Section 9.1.1, Pg 239],分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:1. 连接状态(Attached):设备连接,但未提供电源。2. 上电状态(Powered):设备被复位(Reset),或者说处于地址、配置状态。(参见USB.. 阅读全文
posted @ 2011-10-04 11:25 重归混沌 阅读(1081) 评论(0) 推荐(0) 编辑
摘要: USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。USB总线拓扑结构见下图(最顶端为主机的Root Hub):USB总线拓扑结构(USB Bus Topology)一旦获悉有新设备连接上来,主机就会发送一系列的请求(Resqusts)给设备所挂载到的hub,再由hub建立起一条连接主机(Host)和设备(Device)之间的通信通道。然后主机以控制传输(Control... 阅读全文
posted @ 2011-10-04 09:35 重归混沌 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 我们知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度类型的设备,而USB1.x的hub不能支持高速设备(High Speed Device)。因此,如果高速设备挂到USB1.x的hub上,那该设备只能工作在全速模式下。不管是hub还是设备(device),对于速度的区分是非常重要的,否则,后续的通信根本无法进行。全速和低速识别 根据规范,全速(Full Speed)和低速(Low Speed)很好区分,因为在设备端有一个1.5k的上拉电阻,当设备插入hub或上电(固定线缆的USB设备)时,有上拉电阻的那根数据线就会被拉高,hub根据D+/D-上的电平判断所挂... 阅读全文
posted @ 2011-10-04 09:34 重归混沌 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 折腾了好几天,终于把双机联调给弄成功了,把参数与步骤放在这里,希望对与我一样的人有点帮助!1.首先,安装windbg,并把它的快捷方式发送到桌面上并把中的内容改为:D:/WinDDK/7600.16385.1/Debuggers/windbg.exe -b -k com:pipe,port=//./pipe/com_1,resets=0然后点file->symbols file path,打开如下对话框在里面输入上“srv*c:/symbols*http://msdl.microsoft.com/download/symbols;自已的工程路径”(以分号隔开);2.然后点file-> 阅读全文
posted @ 2011-05-22 14:54 重归混沌 阅读(494) 评论(1) 推荐(0) 编辑
摘要: 在操作系统加载elf文件时都是按页映射的,而IA32下一页一般为4k,如果ld-Ttext 0x80400那么在操作系统去映设分页时应该是映射到0x80000~0x81000这个页表上的,但因为我们的text段入口地址为0x80400为了让程序去正确找到入口点,可以在text段之前构造SHT_NULL类型的无效段以便使text在文件中的偏移为0x400,这样在映射到页后,在加载时,直接跳到0x80400程序就能正常运行! 阅读全文
posted @ 2011-04-28 09:42 重归混沌 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 转自http://hi.baidu.com/419836321/blog/item/6f158d22797008469258070b.html realloc 用过很多次了。无非就是将已经存在的一块内存扩大。 char* p = malloc(1024);char* q = realloc(p,2048); 现在的问题是我们应该如何处理指针 p。 刚开始按照我最直观的理解,如果就是直接将 p = NULL;。 到最后只需要释放 q的空间就可以了。 因为最近在做个封装。结果在做单元测试的时候发现。有时候我在 free(q); 的时候会出错。这样我就郁闷了。 后来仔细一跟踪,发现 realloc 阅读全文
posted @ 2011-03-14 17:54 重归混沌 阅读(195) 评论(0) 推荐(0) 编辑