usb接口

[开发笔记usbTOcan]PyUSB访问设备

偶尔善良 提交于 2019-12-06 06:33:58
前面的几个章节的介绍,基本把usbTOcan的底层代码设计好,现在需要介绍PC端的PyUSB进行简单的测试。 在文章开始之前,需要简单的介绍一下整个系统。 0 | 部署 这里使用了两块TMC123GXL开发板,一块用来周期性的发送CAN报文,另一块则是usbTOcan的主体,如下图所示 实物图如下,使用了层叠的方式,这样节约空间,同时简化了焊接 1 | PyUSB介绍 PyUSB旨在成为一个易于使用的Python模块来访问USB设备。 PyUSB依赖于本地系统库来进行USB访问。 目前,它可以直接使用libusb 0.1、libusb 1.0、libusbx、libusb-win32和OpenUSB,也可以使用任何Python版本(从2.4开始),包括Python 3版本。[有道翻译] 2 | PyUSB安装 pip install pyusb    3 | PyUSB 使用以下代码,周期性的读取usbTOcan接收到的CAN报文 import usb.core import usb.util import array dev = usb.core.find(idVendor=0x1cbe, idProduct=0x0003) if dev is None: raise ValueError('Device not found') while True: try: data =

USB接口外壳地和信号地间的处理

不打扰是莪最后的温柔 提交于 2019-12-06 04:13:33
USB外壳地和信号地之间串接1M电阻,并且还接一个0.01uf的电容到信号地,能否将一下这样处理的原理和目的: 1.将影响外壳的噪音滤除,不影响信号地; 2.迫使板子上电流是流入内部的信号地,而不是流到外壳。 来源: https://www.cnblogs.com/zhiqiang_zhang/p/11961293.html

重温IOC--控制反转与依赖注入

断了今生、忘了曾经 提交于 2019-12-05 23:53:44
转自: https://www.cnblogs.com/jhli/p/6019895.html github上一篇比较贴切的举例: https://github.com/android-cn/blog/tree/master/java/dependency-injection 1 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此, 架构 师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2:对象之间复杂的依赖关系

[转]Spring的IOC原理[通俗解释一下]

北战南征 提交于 2019-12-05 18:59:30
1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2:对象之间复杂的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。 为了解决对象之间的耦合度过高的问题 ,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”

linux中OTG识别到一个U盘后产生一个sg节点的全过程

断了今生、忘了曾经 提交于 2019-12-05 16:49:54
注:本篇文章暂时不做流程图,如果有需求后续补做。 1. 需要准备的源码文件列表: base部分: kernel\base\core.c kernel\base\bus.c kernel\base\dd.c kernel\base\class.c kernel\base\driver.c 头文件部分: kernel\include\linux\device.h kernel\include\linux\usb.h kernel\include\scsi\scsi_host.h usb核心部分: kernel\driver\usb\core\usb.c kernel\driverusb\core\driver.c kernel\driverusb\core\hub.c kernel\driverusb\core\driver.c kernel\drivers\usb\core\message.c kernel\drivers\usb\core\generic.c 大容量设备部分: kernel\driverusb\storage\usb.c scsi部分: kernel\driverscsi\scsi_scan.c kernel\driverscsi\scsi_sysfs.c kernel\driverscsi\sg.c 2. 当一个U盘插入linux设备前发生的事情: a.

(三十四)golang--接口

不打扰是莪最后的温柔 提交于 2019-12-05 09:18:32
golang的多态特性主要体现在接口上; 主要优势:高内服低耦合; package main import ( "fmt" ) type usb interface { start() stop() } type phone struct { } func (p phone) start() { fmt.Println("手机开始工作") } func (p phone) stop() { fmt.Println("手机停止工作") } type camera struct { } func (c camera) start() { fmt.Println("相机开始工作") } func (c camera) stop() { fmt.Println("相机停止工作") } type computer struct { } func (co computer) working(usb usb) { usb.start() usb.stop() } func main() { computer := computer{} phone := phone{} camera := camera{} computer.working(phone) computer.working(camera) } 来源: https://www.cnblogs.com/xiximayou/p

USB设备驱动

▼魔方 西西 提交于 2019-12-04 18:40:56
架构 USB 的硬件识别原理 基本概念 ①如何区分不同的 USB 设备? 每个 USB 设备接入 PC 时, USB 总线驱动程序都会给它分配一个编号(地址); 接在 USB 总线上的每一个 USB 设备都有自己的编号(地址); PC 机想访问某个 USB 设备时,发出的命令都含有对应的编号(地址); 新接入的 USB 设备的设备编号(地址)是0,在未分配新编号之前,PC机使用0编号与其通信; ② USB 为主从结构 USB 主机发起通信,从机处于"绝对被动"地位("通知"主机接收数据的能力都没有); ③ USB 传输类型 控制传输 数据可靠 实时 USB 识别过程 批量传输 数据可靠 非实时 U 盘 " 中断 " 传输 数据可靠 实时 鼠标 实时传输 数据不可靠 实时 USB 摄像头 ④ USB 传输对象:端点(endpoint) 端点0: 传输类型:控制传输; 传输方向:双向(输出和输入); 除了端点0外,其它端点都是单向传输的,只支持一种传输方向; ⑤术语里,程序的输入( IN )、输出( OUT )都是基于 USB 主机的立场说的; 例如:鼠标。鼠标作为从设备,由主机读取鼠标的数据,对主机来说,鼠标对应的端点为输入端点。 设备描述符 程序框架实现分析 ①把USB设备接到开发板上,看输出信息: usb 1-1: new full speed USB device using

go-面向对象编程(下)

别说谁变了你拦得住时间么 提交于 2019-12-04 16:42:04
面向对象编程思想-抽象 抽象的介绍 我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的 属性( 字段)和 行为( 方法)提取 出来,形成一个 物理模型(结构体)。这种研究问题的方法称为抽象 比如一个银行账户: package main import ( "fmt" ) //定义一个结构体Account type Account struct { AccountNo string Pwd string Balance float64 } //方法 //1. 存款 func (account *Account) Deposite(money float64, pwd string) { //看下输入的密码是否正确 if pwd != account.Pwd { fmt.Println("你输入的密码不正确") return } //看看存款金额是否正确 if money <= 0 { fmt.Println("你输入的金额不正确") return } account.Balance += money fmt.Println("存款成功~~") } //取款 func (account *Account) WithDraw(money float64, pwd string) { //看下输入的密码是否正确 if pwd != account.Pwd { fmt.Println

Ubuntu单系统(一):苦难深重的校园网

不想你离开。 提交于 2019-12-04 09:50:08
我的选择: 1、USB安装 2、默认分区 在查看一些博客和google以后,我决定用usb安装,因为不知到其他方式是否是安装成双系统,所以没去尝试,留待探究 在安装前 ,使用英文官网则是介绍另一款软件的用法软件LinuxLive USB Creator,制作启动U盘, http://www.linuxliveusb.com/en/download ;原文链接在这里 http://bbs.pceva.com.cn/thread-70362-1-1.html 安装过程 遇到问题(1) :设置USB为第一启动项,一直错选USB HardDisk,后来改为USB KEY后正常进行。 问题(2) :我设置了默认的分区形式,只因不了解 后面安装很顺利完成,一直到要求重启,出现了 问题(3) :拔掉U盘重启,只进行到下划线一闪一闪,毫无动静,但是插上U盘又可以启动。原因是,安装过程GRUB(即引导文件)放在了U盘中。解决办法是: sudo grub-install /dev/sda sudo update-grub 更新软件源, 遇到了问题(4) :选择软件源。 只知道可以选择最佳服务器,但之前在校园网下更新软件源发现163的软件源比较稳定而且也挺快的,所以留待观察 遇到问题(5) :软件源更新过程中,弹出关于设定GRUB的选框。没什么大问题,更新重启没问题。 -----------------