- 博客(85)
- 收藏
- 关注
原创 phy不link问题
打开自协商,插⽹线前后读取状态寄存器,看值是否有变化,没有变化link 不上,硬件可能存在问题,排查走线。读phy id如果与芯⽚⼿册是否⼀致,则mdio 通讯没有问题。先看phy地址是否和硬件上⼀致。
2023-08-23 13:24:46
970
原创 udc设备控制器
这些数据结构包括描述一个USB设备控制器的usb_gadget、UDC操作usb_gadget_ops、描述一个端点的usb_ep以及描述端点操作的usb_ep_ops结构体。手机要成为U盘,在UDC驱动之上需要另外一个驱动,对于USB大容量存储器而言,这个驱动为File Storage驱动,USB设备控制器(UDC)驱动指的是作为其他USB主机控制器外设的USB硬件设备上底层硬件控制器的驱动,例如,当某运行Linux系统的手机作为PC的U盘时,手机中的底层USB控制器行使USB设备控制器的功能,
2023-06-29 18:24:52
578
原创 cpu负载均衡与网络
当数据包到达时,网卡通过DMA复制数据包并发送中断,Linux内核收集这些数据包并完成中断处理。随着网卡越来越快,基于中断会因大量传入数据包而导致 IRQ 瘫痪,消耗大部分 CPU 功率。NAPI(中断+轮训)与现在常见的 1 Gbps 网卡配合使用。但是,对于10Gbps、20Gbps甚至40Gbps的网卡,NAPI可能还不够Receive Side Scaling(RSS)多个RX / TX队列过程的数据包当接收到数据包时,会对数据包应用过滤器并将数据包分发到RX 队列。echo 3 >
2023-06-29 18:22:58
865
原创 rndis
基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。RNDIS数据传输模型很复杂,每个USB消息都包含了多个以太网包, RNDIS默认期待自己作为USB配置中的唯一功能,这个规范规定的比较宽,从物理层到应用层都有涉及,(也就是介绍中说的:横跨传输层、网络层和数据链路层)所以对于USB复合设备需要注意,RNDIS它期待自己是第一个usb配置。rndis是一种技术,将tcp/ip封装在usb报文,实现网络通信。
2023-06-27 18:18:42
2747
原创 acm/ncm/ecm
通过dmesg内核消息查看设备连接信息及驱动匹配情况usb wmc无线移动通信,usb上网卡(连接移动通信网络)ncm是ecm协议的改进版,将多个以太网包组成一个ntb包在usb总线上传输,提高带宽利用率将多个报文集成到一个buffer中,即实现一次收发多个数据报文(具体收发多少个需要参见cdc_ncm_bind -> cdc_ncm_setup)如果是QMICM建立的data call,不走router的,所以它的IP地址获得的是公网IP。因此流控制可以控制数据传输的进程,防止数据的丢失。
2023-06-27 18:17:57
1166
原创 bulk only
Bulk-Only:USB与设备之间的数据传输都是通过Bulk-In和Bulk-Out来实现的。有三种类型数据在USB和设备传送,它们是命令块包(CBW),命令执行状态包(CSW)和普通数据包。当设备从主机收到CBW块以后,它会把SCSI命令从CBW中分离出来,然后根据要求执行,执行的结果又以CSW的形式发给主机。在Bulk-Only的命令块包(CBW)中,有一段CBECB内容,是SCSI命令块描述符http://blog.sina.com.cn/s/blog_4ec8232f0100rp57.html。
2023-06-27 18:16:52
170
原创 f_mass_storage
mass_storage.c – Mass Storage USB Gadgetfile_storage.c – File-backed USB Storage Gadget, for USB developmentf_mass_storage.c – Mass Storage USB Composite FunctionU盘的功能,分别对应着file_storage.c和mass_storage.c,前者,本身就实现了对应的功能,后者,包含了f_mass_storage.c,而f_mass_storage
2023-06-27 18:14:44
163
原创 cts/rts
如果A设备接收缓冲快满的时发出RTS 信号(意思 通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送如果UART只有RX、TX两个信号,要流控的话只能是软流控;如果有RX,TX,CTS ,RTS 四个信号,则多半是支持硬流控的UART;如果有 RX,TX,CTS ,RTS ,DTR,DSR 六个信号的话,RS232标准的可能性比较大DTR表示数据终端准备好DSR表示数据准备好RI表示振铃提示DCD:载波检测,modem通知计算机是否处于在线状态。
2023-06-27 18:13:47
1493
原创 lun概念
lun mapping是lun与存储设备的主机端口进行绑定,工作站连接不同的主机端口所能访问的lun不同。lun是由存储的控制系统给定,是存储系统的某部分存储资源。lun 逻辑单元号,是scsi的概念。
2023-06-27 18:13:41
84
原创 QA Issue ./so was already stripped问题
可执行文件复制权限和debug解决:INSANE_SKIP_${PN} = “already-stripped”
2023-06-27 18:11:21
193
原创 ntb名词
DMA+NTB的形式就可以访问对控的任何地址,可以实现很多需求,也有可能把对控搞死,主要作用:用来连接两个或者多个分离的memory系统。比如踩内存,由于是对控DMA发起的,到时候非常难定位。NTB可以映射任何一个地址,是典型性的双刃剑。枚举的时候,到了NTB这个桥,枚举事务结束。隔离两个或多个pci系统。
2023-06-27 18:10:36
187
原创 volatile 关键字
访问寄存器使用volatile 声明变量值,系统会重新从所在内存读取数据*(volatile uint32。) 将地址强制转化成volatile Uint32。
2023-06-27 18:08:14
35
原创 uboot gpio
/ 调用gpio_request_by_name_nodev来获取node节点中的"lgpio"属性,并转化为gpio_desc描述符,标志为输出。dm_gpio_get_value //获取gpio_desc描述的GPIO的值。dm_gpio_request //申请gpio_desc描述的GPIO。dm_gpio_is_valid //判断该gpio_desc是否可用。---------------操作gpio---------------
2023-06-13 19:32:39
1486
原创 device descriptor read/64, error -71
64ep0 maxpacket值存储在中初始8个字节的设备描述符,但读取设备。现在是Windows的工作方式:插入新设备时,系统首先向设备描述符发出64字节的读取请求,然后重置设备,然后为其分配地址,然后读取实际的18字节设备描述符。Linux在2.6.10之前的工作方式:当一个新设备被插入,系统首先分配地址,然后读取设备描述符的初始8个字节,然后读取整个18字节的设备描述符。lsusb枚举不成功,插上usb显示未知设备,usb主控制器错误。可能usb供电不足,可能usb端口线长。可能usb驱动能力不够。
2023-06-13 19:07:13
5264
原创 linux下进不去adb
方法1: https://patchwork.kernel.org/project/linux-usb/patch/20180723140220.7166-1-romain.izard.pro@gmail.com/2.gedit 51-adb.rules (编辑rules文件,文件名随意,如gedit会自动打开一个文本,且将文本命名为51-adb.rules)3.在51-adb.rules文件里添加设备的PID和VID信息。4.保存并关闭51-adb.rules。首先查看adb是否被识别成串口。
2023-03-09 19:42:45
587
原创 phy驱动
实现phy device处理相关的接口config_init、config_aneg、read_status、ack_interrupt、config_intr、did_interrupt、match_phy_device、ts_info、hwtstamp、rxtstamp、txtstamp、set_wol、get_wol 其中config_init主要是对phy device进行一些初始化配置; config_aneg、read_status主要用于设置phy device的自适
2023-02-24 18:29:50
441
原创 rndis/ecm/ncm
USB serialUSB serial,虚拟 USB 串口,主要包括 AT 接口,实现通过 AT 控制 modemRNDIS 是一种 USB 虚拟的网卡设备,主要实现 TCP/IP 数据业务ECM, Ethernet Control Model Devices ,主要为了在于 USB bus 基础之上,实现 支持Ethernet(IEEE802.3)通信协议的,与 NCM 的区别:一个 USB 传输只能承载一个以太网报文。Network Control Model Devices,主要为了在于
2023-02-22 18:39:33
3093
原创 网卡ping不通故障分析
红叉:phy不通power,reset gpio配置 测试 MDIO/MDC 波形是否异常 mdio读写接口检查 phy id 确认 MAC控制器驱动是否正常加载link状态检测 测量时钟MAC_CLK、RX_CLK、TX_CLK引脚信号千兆时都为125MHz,百兆时都为25MHz,十兆时为2.5MHz 检测phy是否正常rx/tx = 0 板子ping pc 抓包,确认 链路mac/phy 异常
2023-02-22 18:37:57
1455
原创 adb push遇到的问题
问题:Read-only file system解决:mount -o remount rw /问题:must be superuser to use mount解决:su问题:permission denied解决:adb remount问题: Not running as root. Try “adb root” first.解决:adb root
2022-02-14 19:06:01
1906
原创 解决 sh:write error:Invalid argument
echo 10 > export出现 sh:write error:Invalid argument首先#echo “10” > export还是出现sh:write error:Invalid argument那么使用# cat /sys/kernel/debug/gpio 查看对应的gpio号找到gpio控制器的索引,比如gpiochip99开始 99对应0,100对应1…99+10那么使用 echo 109 > export...
2022-01-17 18:55:05
9205
原创 i2c驱动
i2c_dev驱动注册static int __init i2c_dev_init(void){ register_chrdev_region}i2cdev_attach_adapteri2c-dev.c的核心static const struct file_operations i2cdev_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .read = i2cdev_read, .write = i2cdev_w
2022-01-13 20:18:58
224
原创 led子系统
led-class.c/driver/led/led-class.c led_classdev接口注册:int led_classdev_register(struct device *parent, struct led_classdev *led_cdev){}注销:void led_classdev_unregister(struct led_classdev *led_cdev);挂起:void led_classdev_suspend(struct led_classdev
2022-01-11 19:33:34
457
原创 vi编辑命令
vi:命令模式插入模式底行模式进入vi vim xxx进入命令行 i退出vi Esc +:w xxx 将文章以指定的文件名xxx保存:wq 保存并退出vi:q! 不保存强制退出vi移动光标ctrl+b 屏幕往后移动一页f 屏幕往前移动一页u 屏幕往后移动半页d 屏幕往前移动半页0 移到文章的开头G 移动到文章的最后。$ 移动到光标所在行的行尾^ 移动到光标所在行的行首w 光标跳到下个字的开头e 光标跳到下个字的字尾b 光标回到上个字的开头
2022-01-10 19:24:05
720
原创 mdio读写
SMI 接口包括两根信号线:MDC和MDIO通过MAC层芯片(或其它控制芯片)可以访问物理层芯片的寄存器,并通过这些寄存器来对物理层芯片进行控制和管理。SMI管理接口如下:MDC:管理接口的时钟,是非周期信号,与TX_CLK和RX_CLK无任何关系。MDIO:双向的数据线。传送MAC层的控制信息和物理层的状态信息。MDIO数据与MDC时钟同步,在MDC上升沿有效。#define MII_MMD_CTRL 0x0d#define MII_MMD_DATA 0x0estatic void mdi
2022-01-06 22:57:11
1880
原创 usb NRZI
usb的编码方式NRZIRZ归零编码正电平代表逻辑1,负电平代表逻辑0。每传完一次数据,信号回到零电平。在归零后重新采样,不需要单独的时钟信号,称自同步信号。NRZ不归零编码NRZI反向不归零编码:用翻转来表示一个逻辑,而信号保持不变来表示另一个逻辑。而在USB传输的编码中采用的是NRZI格式,电平翻转代表逻辑0,电平不变代表1。...
2021-12-04 15:33:32
3100
原创 linux 命令
Linux:操作系统,提供了最底层的硬件控制与资源管理的完整架构GUN:通用许可证设备在Linux内的文件名/dev/sd[a-p] USB硬盘机 闪存盘/dev/vd[a-p] Virtl/IO/dev/lp[0-2] 打印机/dev/usb/lp[0-15] USB接口分区表:记录整个硬盘分区的状态MBR:可开机设备第一个扇区的开机记录区块(开机管理程序)BIOS:开机主动执行的固件目录树结构:根目录“/”挂载:设备与磁盘分区对应的关系command 指令 [-optioins]
2021-12-04 15:31:40
833
原创 DMA存储器
DMA:direct memory access :直接存储器访问DMA将数据从一个地址空间复制到另一个地址空间,在外设和存储器之间或者存储器与存储器之间进行高速数据传输。DMA:数据传输不需要cpuDMA传输参数须知:数据源地址数据传输位置的目标地址数据传输量传输模式stm32由2个DMA控制器,DMA1有7个通道,DMA2有5个通道从外设(TIMx[x=1,2,3,4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1,2]和USARTx=[x=1,2,3] )产生的7个DMA请
2021-11-26 16:56:25
4036
原创 总线速率比较
I2C总线半双工,数据线和时钟线。标准速度:100kbps快速模式:400kbps高速模式:3.4MbpsUART全双工,三线收 发 接地线RS232:速率<=20KbpsRS422:10MbpsRS485:最高传输速率10MbpsSPI总线全双工,4线,cs,sclk,sdo,sdi。传输速率比I2C快, >=3.4MbpsUSB总线USB1.1:low speed:1.5Mbpsfull speed: 12MbpsUSB2.0:high speed: 25~48
2021-11-24 12:25:25
3351
原创 usb驱动相关
设备描述符: struct usb_device_descriptor{ _ _u8 bLength; //描述符长度 _ _u8 bDescriptorType; //描述符类型编号 _ _le16 bcdUSB; //USB版本号 _ _u8 bDeviceClass; //USB分配的设备类code _ _u8 bDeviceSubClass;// USB分配的子类code _ _u8 bDeviceProtocol; //USB分配的协议code _ _u8 bMaxPack
2021-11-23 17:05:51
4302
原创 usb传输类型
令牌包用来启动一个事务,总是由主机发送。数据包传送数据,可以从主机到设备,也可以从设备到主机,方向由令牌包决定。握手包的发送者通常为数据接收者,当数据接收正确后,发送握手包。设备也可以用NAK握手来决定数据还未准备好。批量传输:使用批量事务传输数据。三阶段:令牌包、数据包、握手包。批量传输分为批量读和批量写。应用在数据量大、对数据的实时性要求不高的场合。批量输入事务:IN OUT 令牌包含设备地址和端点地址。如果设备解码令牌包时出错,直接进入空闲状态。PING令牌用来探测设备是否有空间接收数
2021-11-18 20:05:28
2173
原创 usb 包
一个传输由多个事务组成一个事务由一个或多个包组成数据在主机和端点之间被传输,逐渐与端点的关联叫pipes。一个usb设备可以有多个管道。包只能在帧内传输。高速usb总线的帧周期位125us,全速和低速位1ms。帧起始为SOF,帧末尾为EOF。EOF不是一个包,是一种电平状态,EOF期间不允许有数据传输。包不能被打断或干扰。属于一次事务传输的几个包必须连续,不能跨帧完成,一次传输由一次到多次事务传输构成,可以跨帧完成。包组成:同步字段SYNC、包标识符字段PID、数据字段、循环冗余校验字段CRC、包
2021-11-18 20:03:53
3220
原创 usb基础
usb:universal serial busCRC:循环冗余EOP:end-of-packetHub:集线器(一个结点发送数据,所有结点都可收到),为主机提供一个或多个附属点。usb支持主机与各种外设之间的数据交换usb连接:设备连接主机bus topology:总线拓扑usb通信通过usb的Endpoint端点主机与端点之间的数据传输通过pipe主控制器是硬件、固件、软件的整合pulled bus轮询总线pipe:stream、message。message要求进出进出方向必须要
2021-11-18 19:59:41
2429
原创 pcie总线
PCIe总线使用高速差分总线,采用端到端的连接方式PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端PCIe总线的物理链路的一个数据通路(Lane)中,由两组差分信号,共4根信号线组成rx,tx。一个PCIe链路可以由多个Lane组成PCIe链路使用差分信号进行数据传送,一个差分信号由D+和D-两根信号组成,信号接收端通过比较两个信号的差值,判断发送端发送的是逻辑“1”还是逻辑“0”。与单端信号相比
2021-10-20 10:13:20
3352
原创 usb协议
usb:串行总线usb1.0低速模式1.5Mb/susb1.1全速模式:12Mb/susb2.0 高速模式:480Mb/s 500mAusb3.0 超高速模式:5.0Gb/s 实际3.2Gb/s 900mAusb3.1 超超高速模式:10Gb/s实际7.2Gb/s 20V/2A-仅限于Type-A/B 12V/3A-Type-Cusb1.1 OTG usb2.0 OTG:作为相应的补充,支持点对点通信。usb端点:位于usb设备或主机上的一个数据缓冲区,用来存放和发送usb的各种数据,每一
2021-10-20 10:10:17
1546
转载 mtd介绍
mtd 内存技术设备,引入mtd为nor flash和nand flash设备提供统一接口。mtd将文件系统和底层flash存储器进行隔离。mtd:设备节点、设备层、原始设备层、硬件驱动层flash硬件驱动层:对flash硬件读写擦除操作,mtd设备的Nand Flash芯片的驱动则在drivers/mtd/nand/子目录下,Nor Flash芯片驱动位于drivers/mtd/chips/子目录下。mtd nand flash驱动介绍flash硬件驱动层:负责在init时驱动flash硬件并建
2021-09-27 15:55:42
4645
原创 flash详解
flash:闪存,内部存储是MOSFET,里面有个浮动、悬门Floating Gate,是真正的存储数据的单元。Nand Flash 成本低,使用中数据读写容易读错。Nor Flash 容量相对小,读写不容易出错。用Nor Flash存储启动代码,Nand Flash做整个系统和用户数据的存储。CLE命令锁存使能 高电平有效ALE地址锁存使能 高电平有效CE选中使能WE写使能RE读使能NorFlash 带有通用的SRAM接口,轻松的挂接在cpu的地址、数据总线,对cpu的接口要求低,特点是芯片
2021-09-24 14:47:18
2119
原创 gpio相关介绍
GPIO:通用输入输出端口。gpio的基本输出功能由STM32控制引脚输出高、低电平,实现开关控制。最基本的输入功能是检测外部输入电平gpio工作模式:输入模式:上拉/下拉/浮空。在输入模式中,施密特触发器打开,输出被禁止。数据寄存器每隔1个AHB1时钟周期更新一次,可通过输入数据寄存器GPIOx_IDR读取I/O状态。其中AHB1的时钟默认为180MHz。输出模式:输出使能,推免模式时双mos管方式工作。输出数据寄存器GPIOx_ODR控制I/O输出高低电平。输出速度可配置,有2/25/50/1
2021-09-24 14:43:22
3155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人