- 博客(127)
- 收藏
- 关注
原创 Autosar CP —诊断服务详解
汽车诊断是指通过电子控制单元(ECU)和诊断工具对车辆进行检查和分析,识别和定位故障或潜在问题的过程。汽车诊断系统帮助维修技师和车辆拥有者了解车辆的运行状况,确定潜在的故障源,并进行适当的维修或维护。现代车辆配备了多个电子控制单元(ECU),可以监控发动机、变速箱、制动系统、安全系统等各类关键系统。寻址方式特点应用场景功能寻址广播请求给多个ECU,多个ECU检查并决定是否响应。读取DTC信息、会话控制、网络管理等。物理寻址仅对特定ECU发送请求,单个ECU响应。编程、配置、参数调整、校准等。
2024-10-07 16:59:08
2014
原创 AutoSar CP 通信服务核心—Com模块详解
在AUTOSAR Classic Platform (CP) 中,Com模块(Communication模块)是负责实现应用层与通信栈之间的接口。它主要管理与通信相关的数据传输,并确保应用层数据通过CAN、LIN、FlexRay、以太网等通信总线正确传输。
2024-10-07 09:50:50
2013
原创 AutoSar通信服务—车载LIN总线详解
主节点:车身控制单元(BCM)是LIN总线的主节点,它负责发起与四个车门LIN从节点的通信,周期性地查询各个车门的状态。从节点:每个车门上有一个LIN从节点,负责检测车门的状态(例如:车门是否关闭、是否锁定)并将其状态信息通过LIN总线返回给主节点。
2024-10-03 16:08:07
2371
原创 AutoSar 通信服务架构,CAN通信诊断详解
AUTOSAR(Automotive Open System Architecture)通信服务是为了简化车内ECU(电子控制单元)之间的通信而设计的。它基于多种汽车通信协议(如CAN、LIN、FlexRay等),并定义了一系列模块来组成通信协议栈。
2024-09-30 19:37:38
3095
原创 嵌入式通信—UART,RS232,RS485通信协议原理详解
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一个广泛使用的串行通信协议,通常用于计算机与外设之间的通信。是一种通用的**串行**、**异步**通信总线,该总线有两条数据线,可以实现**全双工**的发送和接收。
2024-09-19 10:43:21
1572
原创 嵌入式开发—CAN通信协议详解与应用(下)
在Linux系统中,CAN(Controller Area Network)通信可以通过SocketCAN接口进行操作。SocketCAN是Linux内核为CAN总线提供的原生接口,允许使用类似于套接字(socket)的方式与CAN网络进行通信。它支持常用的CAN协议,包括标准帧和扩展帧,并且可以通过命令行工具或编程接口进行操作。
2024-09-18 17:01:56
1832
原创 嵌入式开发—CAN通信协议详解与应用(中)
在CAN通信中,位时间(Bit Time)是指总线上传输一个位所需的时间,是CAN总线通信速率(即波特率)的倒数。:即使多个节点同时发送,也不会破坏总线上的数据,因为仲裁失败的节点会主动停止发送,而优先级高的节点可以继续发送其帧,保证了数据传输的完整性和无碰撞。:通过仲裁机制,紧急消息(优先级高)可以在总线被占用时打断其他非紧急消息的传输,保证高优先级数据的实时传输。:消息标识符决定了优先级,数值越小(即更多显性位),优先级越高,优先级高的节点总是可以优先发送。消息ID数值越小,优先级越高。
2024-09-18 08:01:35
1420
原创 嵌入式开发—CAN通信协议详解与应用(上)
在1980年代,汽车内部的电子控制单元(ECU)数量逐渐增加,传统的点对点电气通信方式已经难以满足需求。每一个电子控制单元与其他设备之间的点对点连接使得系统布线复杂、成本高、故障率高。汽车制造商希望有一种能够简化布线,同时满足车辆实时控制和高可靠性要求的通信方式。
2024-09-17 11:06:58
1824
原创 嵌入式通信原理—SPI总线通信原理与应用
SPI是一种同步串行通信协议,用于短距离的设备之间数据传输。它常用于微控制器与外部设备(如传感器、闪存、显示器等)的通信。
2024-09-16 11:32:18
2131
原创 Linux驱动开发—在自己总线下注册设备和驱动
在 Linux 内核编程中, 用于将符号(例如变量、函数)导出到内核符号表中,使其可以被其他内核模块或驱动程序引用和使用。具体来说:导出符号的机制使得一个模块可以将某些符号公开给其他模块使用,而不需要将所有的实现都暴露出来。这对于模块化开发和代码复用非常有用。如果一个符号通过 导出,在另一个模块中可以直接使用这个符号,而无需显式地声明或定义它。为了使用导出的符号:内核中,已经提供了一个API供开发者来调用,
2024-08-29 11:30:57
1122
原创 Linux驱动开发—创建总线,创建属性文件
在 Linux 内核中,总线(Bus)是用于描述系统中各类设备之间连接关系的一个抽象概念。总线不仅仅指物理上的数据传输路径,也可以是逻辑上的连接结构。Linux 内核通过总线来组织和管理系统中的设备,并提供统一的接口和框架,以便设备驱动程序可以与硬件进行交互。
2024-08-28 11:08:58
955
原创 Linux驱动开发—设备模型框架 kobject创建属性文件
在 Linux 内核中,属性文件(Attribute Files)指的是通过sysfs文件系统暴露给用户空间的文件,这些文件通常用于在用户空间与内核空间之间进行简单的数据交换或配置。上述暴露出一个问题,如果某个设备属性文件过多,如何优化if的次数?这样会让读写文件很臃肿,最好的方法,应该是一个属性对应一个show和store可以使用ATTR宏定义来实现这个功能mykobj结构体包含了一个kobject对象以及两个整型成员变量reg_count和reg_status。kobject。
2024-08-27 17:08:45
957
原创 嵌入式通信—UART通信原理详解
在串行通信中,如UART、RS-232、SPI等,波特率的单位是bps,全称是bit per second,意为每秒钟传输的bit数量。UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一个广泛使用的串行通信协议,通常用于计算机与外设之间的通信。波特率(Baud Rate)是通信系统中的一个关键参数,表示每秒传输的符号数或调制信号的变化次数。并行通信和串行通信是两种不同的数据传输方式,各自具有独特的优缺点。
2024-08-19 15:28:31
374
原创 Linux驱动开发—设备模型框架 kset和 kobject 详解
设备模型(Device Model)是 Linux 内核中的一个抽象层,用于统一管理和组织系统中的各种硬件设备及其驱动程序。它为设备、驱动、总线和电源管理等提供了一个统一的接口和结构,使得内核能够更加高效和一致地管理系统中的硬件资源。
2024-08-16 10:49:44
1210
原创 Linux中V4L2框架介绍—V4L2 Core
V4L2(Video for Linux 2)框架是 Linux 内核中的一个子系统,专门用于处理视频设备的管理和控制。它提供了统一的 API 和抽象层,使得开发者可以编写通用的视频驱动程序,同时使用户空间的应用程序能够轻松地访问和控制视频设备。
2024-08-12 18:50:32
1741
原创 I2C子系统框架入门—i2c驱动示例
在这个流程中,驱动程序(即你的代码)负责发起I²C命令请求,而实际的数据传输和命令执行由I²C控制器完成。I²C控制器是硬件层面的存在,它通过I²C总线执行读写操作,将驱动程序的请求发送到物理设备上。
2024-08-12 09:43:06
1291
原创 Linux驱动开发—设备树传递给内核,匹配驱动过程分析
内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终的硬件配置。内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终的硬件配置。内核启动时,会在启动代码中处理传递过来的 DTB 地址,并将其保存在全局变量中。内核将解析的设备树节点注册到设备模型中,通常通过位于drivers/of/platform.c的。设备树解析后,内核会根据设备树中的信息来匹配相应的驱动程序,并进行设备初始化。内核在初始化过程中会调用设备树相关的函数来解析 DTB。
2024-08-06 19:36:18
1097
原创 Linux驱动开发—设备树描述引脚复用 Pinmux 与Pinctrl
Pinmux,或 Pin Multiplexer,是一种在电子电路设计中使用的技术,用于在一个芯片上多路复用(共享)引脚的功能。通过 pinmux,可以将一个引脚配置为多种功能,例如 GPIO(通用输入输出)、UART(通用异步收发传输器)、I2C(集成电路间总线)、SPI(串行外设接口)等。这样可以在有限的引脚资源下实现更多的功能,增加芯片的灵活性和可扩展性。pinmux 广泛应用于嵌入式系统设计、微控制器、系统级芯片(SoC)等领域,特别是在需要实现多种外设功能且引脚资源有限的情况下。
2024-08-06 17:07:03
2995
原创 Linux驱动开发—设备树分析:GPIO,中断,时钟信息,CPU信息
这段设备树描述了一个含有两个簇(Cluster)的多核系统,其中第一个簇包含四个Cortex-A53 CPU核心,第二个簇包含两个Cortex-A72 CPU核心。每个CPU节点包含兼容性、寄存器地址、启用方法、时钟、操作点等属性。还定义了两个二级缓存节点,并描述了系统的空闲状态。这样,操作系统可以根据设备树信息正确地初始化和管理各个CPU核心及其相关硬件。在驱动开发过程中,不需要过多关注如何在设备树中编写时钟信息,而是更应该关注如何在驱动代码中获取和解析这些时钟信息。
2024-08-06 12:23:15
1948
原创 Linux驱动开发—设备树基本概念,语法详解
设备树(Device Tree,简称DT)是一种数据结构,用于描述硬件的布局和连接方式。它最初由Open Firmware引入,后来被Linux社区采用,用于解决在嵌入式系统中硬件描述的问题。设备树通过一种独立于硬件平台的方式,向操作系统内核提供设备信息,使得内核不再需要内置具体的硬件配置代码,从而提高了系统的可移植性和灵活性。平台独立性:设备树使硬件描述从内核代码中分离出来,通过一份设备树文件(通常是.dts文件)来描述硬件。这样,同一内核可以运行在不同硬件平台上,只需提供相应的设备树文件。
2024-08-05 21:54:56
2053
原创 Linux驱动开发—平台总线模型详解
Linux 平台总线模型(Platform Bus Model)是一种设备驱动框架,用于处理那些没有标准总线(如 PCI、USB 等)的嵌入式设备。它为这些设备提供了统一的设备驱动模型,简化了设备驱动程序的编写和管理。
2024-08-05 18:15:34
1165
原创 Linux驱动开发—中断,中断号,中断控制器GIC,中断子系统架构详解
函数在 Linux 内核中用于注册中断处理程序。它是设备驱动程序中常用的函数,用于为特定中断向量分配中断处理程序。函数在 Linux 内核中用于注册中断处理程序。它是设备驱动程序中常用的函数,用于为特定中断向量分配中断处理程序。以下是函数的详细介绍和一个与相机设备相关的示例。函数原型参数说明irq: 中断号,表示你要注册的中断向量。handler: 中断处理程序,当指定的中断发生时,系统将调用这个处理程序。flags: 标志,用于指定中断类型和处理选项。常见的标志包括(上升沿触发),(下降沿触发),
2024-08-05 11:21:16
1548
原创 Linux驱动开发—ioctl命令构成,设备驱动基础使用ioctl详解
ioctl(输入/输出控制)是一种系统调用,用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/输出操作。它通常用于对设备执行标准文件操作(如读取、写入、打开和关闭)之外的特殊操作。ioctl提供了一种通用的机制,通过文件描述符与设备进行交互,支持各种类型的设备操作和控制。ioctl定义命令和参数:设备驱动程序和用户空间应用程序之间的交互是通过命令和参数来实现的。命令通常是一个宏,表示特定的操作,而参数则是传递给驱动程序的数据。调用ioctl系统调用:用户空间应用程序通过文件描述符调用ioctl。
2024-08-04 20:19:55
4486
原创 Linux驱动开发—Linux内核定时器概念和使用详解,实现基于定时器的字符驱动
每个滴答的时间长度由系统的时钟中断频率决定,通常是 1 毫秒(即 1000 Hz)或 10 毫秒(即 100 Hz),但具体取决于内核配置。在 Linux 内核中,定时器是用来管理和调度延迟操作的机制。Linux 内核提供了几种不同类型的定时器,每种定时器都有不同的特点和用途。定时器在内核中的实现涉及到多种机制,包括定时器队列、定时器中断以及内核调度机制等。在 Linux 驱动模块中使用定时器,通常有两种主要方式:使用软定时器和高精度定时器。是内核中时间管理的一个基本概念,广泛用于定时器和延迟操作。
2024-08-04 10:04:14
1038
原创 Linux驱动开发—并发与竞争,原子操作,自旋锁,信号量详解
自旋锁在等待锁的时候不会引起调度器的上下文切换,而是不断地循环检查锁的状态,直到锁可用为止。是指多个线程或进程在没有适当同步的情况下访问和修改共享资源时,操作的执行顺序影响到最终结果,从而导致不确定性和错误的情况。是指两个或多个线程或进程在等待彼此持有的资源,导致所有参与者都无法继续执行的情况。:原子操作在多线程环境中是安全的,多个线程可以并发执行而不会引起竞态条件。:原子操作是不可分割的,执行过程中不会被中断,确保操作的完整性。此时,线程A和B都在等待对方释放资源,形成循环等待,导致死锁。
2024-08-02 18:33:59
866
原创 字符设备驱动基础—sys文件系统,udev介绍,驱动模块在内核空间注册设备
udev是 Linux 系统中的一个设备管理工具和守护进程,负责在用户空间管理设备节点。它是设备管理框架的一部分,用于响应系统中的设备事件,并在/dev目录中创建和删除设备节点。udev是 Linux 系统中处理设备管理的重要组件。它提供了一种灵活而强大的方式来响应和管理设备事件,确保系统中的设备节点和权限设置是动态更新和适当配置的。对于系统管理员和开发者来说,理解和利用udev可以大大简化设备管理的工作。
2024-08-01 16:53:12
962
原创 字符设备驱动开发基础—静态/动态注册设备号,使用cdev注册驱动
在Linux和类Unix操作系统中,设备文件用于表示各种硬件设备和虚拟设备。每个设备文件通过一个唯一的设备号进行标识,该设备号由主设备号和次设备号组成。设备号帮助操作系统将设备文件与实际的设备驱动程序关联起来,以便正确处理对设备的操作请求。在Linux内核中,cdev结构体是字符设备驱动程序的核心数据结构之一,用于表示和管理字符设备。字符设备是通过字符设备文件接口与用户空间进行交互的设备,例如终端、串口、鼠标等。
2024-08-01 09:39:15
1533
原创 Linux驱动开发—编写第一个最简单的驱动模块
在Linux系统中,管理内核模块的常见命令包括lsmod、insmod、rmmod、modinfo等。这些命令用于列出、加载、卸载和查看内核模块的详细信息。
2024-07-31 22:02:07
2018
原创 Linux驱动入门—什么是驱动?体系结构,驱动的分类,开发驱动需要注意的问题
在广义上,"Linux驱动"可以指在Linux操作系统下运行的所有硬件驱动程序。这些驱动程序是软件组件,允许Linux内核与硬件设备进行通信和交互。广义的Linux驱动包括各种设备的驱动程序,如显示器、键盘、网络接口、存储设备等。它们使操作系统能够识别、管理和使用这些硬件设备
2024-07-31 20:09:18
2234
1
原创 MIPI CSI-2 协议介绍,CSI-2构成,数据多通道分布和合并详细解析
MIPI(Mobile Industry Processor Interface)协议是由MIPI联盟(MIPI Alliance)制定的一套标准,用于移动设备中的芯片间通信。MIPI协议涵盖了从图像传感器、显示屏、存储、音频到射频和物联网设备的广泛应用。MIPI协议的目的是提供高效、低功耗、低成本的解决方案,以满足现代移动设备和其他嵌入式系统的需求。 CSI-2规范定义了发射器和接收器之间的标准数据传输和控制接口。定义了两种高速串行数据传输接口选项。
2024-07-30 17:01:24
4893
原创 i2c中结构体 数据传输 i2c Tools使用
传输消息函数会遍历msgs数组中的所有i2c_msg,并逐一通过指定的 I2C 适配器进行传输。处理读写操作根据i2c_msg结构体中的flags,确定是进行读操作还是写操作,并将数据从缓冲区发送到设备或从设备接收。同步执行所有消息按顺序执行,传输完成后函数返回。
2024-07-30 14:00:24
475
原创 I²C介绍、I²C协议设计、I²C信号、数据格式、传输过程详解
I²C(Inter-Integrated Circuit)协议是一种串行通信协议,用于在微控制器和其他外围设备之间进行低速数据传输。它由飞利浦公司(现为恩智浦半导体公司)在20世纪80年代初开发,广泛应用于各种嵌入式系统。双线通信:I²C协议使用两根线进行通信,一根是数据线(SDA),另一根是时钟线(SCL)。这两条线是双向的,可以同时进行发送和接收数据。多主多从:I²C总线上可以有多个主设备和多个从设备。主设备是发起通信并控制时钟信号的设备,而从设备则响应主设备的请求。
2024-07-29 18:00:00
1389
原创 OpenCV 边缘检测 点到多边形测试
多边形测试(Point-in-Polygon Test)是计算机图形学和几何学中的一个经典问题,用于**确定一个给定点是否位于一个多边形内部**。这个测试在地理信息系统、计算机图形学、游戏开发和其他领域中非常有用。
2024-07-26 10:10:59
715
1
原创 OpenCV 图像预处理—图像金字塔
高斯金字塔(Gaussian Pyramid)和拉普拉斯金字塔(Laplacian Pyramid)是图像处理中的两种多尺度表示方法,用于图像的分层处理和分析。
2024-07-25 20:42:19
1484
原创 OpenCV 边缘检测—霍夫变换直线检测详细原理 代码实现
霍夫变换(Hough Transform)是一种图像分析技术,广泛用于检测图像中的形状,如直线、圆形等。霍夫直线变换特别适合于检测边缘图像中的直线。它通过将图像中的点转换到参数空间,并寻找累积的高值来确定直线的存在。
2024-07-24 16:31:31
1647
原创 OpenCV 卷积 Robert算子,Laplance算子,Sobel算子,Canny边缘检测原理
OpenCV 提取边缘的原理主要依赖于图像的梯度变化。边缘是图像中灰度值发生显著变化的区域,通常对应于物体的边界。在图像特征提权,对象检测,模式识别都有重要作用。判断灰度值发生显著变化通常通过计算图像的梯度来实现。梯度是图像灰度值变化的速率或方向,即垂直方向和水平方向的一阶导数,delta = f(x)-f(x-1),delta越大,说明像素在x方向变化越大,边缘信号越强,说明是极有可能是边界。
2024-07-24 11:11:34
1336
原创 # OpenCV 图像预处理—形态学:膨胀、腐蚀、开运算、闭运算 原理详解
形态学(Morphology)是图像处理中的一种技术,主要用于分析和处理图像中的结构和形状。形态学操作基于图像的形状和结构,而不是像素的具体值。它通常应用于二值图像(黑白图像),但也可以用于灰度图像。形态学操作在许多图像处理任务中发挥着重要作用,如去噪声、分割、边缘检测等。
2024-07-23 17:59:51
4652
原创 OpenCV 卷积操作 均值,高斯,中值滤波 图片降噪
均值滤波的原理是使用一个固定大小的窗口(卷积核)在图像上滑动,并计算该窗口覆盖区域内所有像素值的平均值,然后用这个平均值替换窗口中心的像素值。中值滤波的基本思想是对图像中的每个像素,用其邻域内所有像素值的中值来替换原像素值。在执行卷积操作时,会使用一个小的矩阵,称为卷积核或滤波器,这个卷积核会与图像的局部区域进行元素乘积求和的运算。卷积核是一个小矩阵,用于在图像上滑动,并在每个位置与图像的对应区域进行加权求和,产生新的像素值。高斯模糊是使用高斯函数定义的卷积核与图像进行卷积来实现的。
2024-07-23 11:13:40
2018
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人