- 博客(66)
- 收藏
- 关注
原创 嵌入式第六十六天(I2C子系统架构)
开发者需基于I2C子系统架构实现,包括设备树配置、数据读写逻辑、与具体传感器通信的协议(如SMBus或自定义指令)。由芯片厂商(如NXP)基于Platform总线架构实现,负责硬件寄存器操作和时序控制,开发者通常无需修改。Linux内核提供的核心逻辑,包括总线注册、设备匹配、通信协议处理等,为设备驱动提供标准化接口。SPI占用资源较多,需要SCL、MOSI、MISO、CS和GND五根线。I2C占用资源较少,仅需SCL、SDA和GND三根线。SCL(时钟线)、SDA(数据线)、GND(地线)。
2025-10-05 12:33:08
838
原创 嵌入式第六十三天(简单设备树文件编写,MISC驱动)
设备树是一种描述硬件资源信息的文件形式,与驱动程序配合使用,用于在Linux系统中动态传递硬件配置信息。
2025-09-25 18:24:49
435
原创 嵌入式第六十二天(led驱动)
3. 通过 make menuconfig 选择“M”,以模块形式编译,对应配置项的 CONFIG_XXX 会加入 .config 文件中( CONFIG_XXX = m )。2. Linux系统下的设备都有一个设备号: 设备号 = 主设备号(设备类型) + 次设备号(该种设备类型的第几个设备)。1. 驱动根据设备功能分为不同类型的设备,可通过 cat /proc/devices 查看设备类型。3. 添加设备:每添加一个设备,需在文件系统中添加该设备的设备节点,例如 /dev/led0。
2025-09-24 22:41:01
860
原创 嵌入式第六十一天(驱动编译)
uboot将文件系统相关的参数 bootargs 写入到设备树的choosen节点中,向内存传参:r0 固定值,r1 CPU ID号,r2 设备树内存地址。uboot会实现自搬移,为内核腾出内存空间,在EMMC上寻找zImage和DTB文件(或利用tftp从服务器下载),并加载到DDR中。uboot重新设置中断向量表的位置(协处理器 CP15),初始化硬件外设(串口、网口、EMMC),加载引导内核。内核根据设备树信息重新初始化外设,找到choosen节点查找文件系统所在位置,引导启动文件系统中的内核进程。
2025-09-23 19:45:47
282
原创 嵌入式第六十天(系统移植)
内核镜像文件,主要功能包括:内存管理、任务管理、多任务间通信、网络管理和文件系统管理。根文件系统,实现用户交互,支持shell命令、库文件管理及设备操作。用于硬件平台无系统时的首次启动,通过PC传输系统文件至开发板。一段逻辑代码,主要完成两个功能:初始化硬件外设和加载内核。理论上可烧录至Nand Flash启动,但实际无法实现。将系统烧录至SD卡启动,适用于代码调试或硬件检测。设备树文件,与内核搭配使用,包含硬件信息。将系统烧录至EMMC,实现开发板自启动。
2025-09-22 20:38:43
189
原创 嵌入式第五十八天(LCD)
2007 年 1 月 9 日苹果发布了划时代的第一代 Iphone,也就是 Iphone 2G,Iphone 2G 上使用了多点电容触摸屏,而当时的手机基本都是使用的电阻触摸屏。和电阻触摸屏相比,电容触摸屏最大的优点是支持多点触摸(后面的电阻屏也支持多点触摸,但是为时已晚),电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才有反应,而且电屏不需要校准。如今多点电容触摸屏已经得到了广泛的应用,手机、平板、电脑、广告机等等,如果要做人机交互设备的开发,多点电容触摸屏基本是不可能绕过去的。
2025-09-22 20:20:03
156
原创 嵌入式第五十七天(SPI(adxl345))
问题1:什么是SPI?四线SPI的四根信号线各自作用是什么?- SPI定义:SPI(Serial Peripheral Interface,串行外设接口)是一种高速的、全双工的、同步的串行通信总线,常用于短距离设备间(如微控制器与传感器、存储芯片、显示模块等)的通信。- 四线SPI信号线作用- SCLK(Serial Clock):串行时钟线,由主设备产生,用于同步主从设备之间的数据传输。
2025-09-18 18:02:49
718
原创 嵌入式第五十六天(ADC)
ADC即模数转换器(Analog-to-Digital Converter),是一种将模拟信号(如连续变化的电压、电流等)转换为数字信号(由0和1组成的离散数值)的电子器件。它决定了ADC能转换的模拟信号范围,转换公式通常为:数字输出值 =(输入模拟电压 / 参考电压)× 2^n(n为ADC位数)。常见的分辨率有:8位、10位、12位、16位等。ADC的分辨率是指其对模拟信号的细分能力,通常用**位数(bit)**表示,位数越多,分辨率越高,能区分的模拟信号细节越精细。2、什么是ADC的分辨率?
2025-09-17 18:37:03
213
原创 嵌入式第五十五天(I2C(AT24C02))
接着,在通信前,先有发送方(主机)发送一个起始信号:即在时钟信号SCL高电平时,数据线SDA发送一个低电平;2.I2C写入某个设备:首先要由发送方(主机)发送一个起始信号,后再由高位到低位发送设备地址,(此设备地址在发送时要左移一位,因为其最后一位,也就是第8位要传输读写流向位,1表示接下来由从机写向主机,0表示接下来由主机写给从机,在这里我们把最后一位置为0);然后发送从设备的地址(7位地址 + 1位写操作标志位,写操作标志位为0),用于选择要读取的从设备,并告知从设备接下来要设置读取的寄存器地址;
2025-09-17 13:10:39
721
原创 嵌入式第五十四天(EPIT,GPT)
时钟源选择 :EPIT 通常有 3 个时钟源可供选择,通过配置其配置寄存器 EPITx_CR 中的 CLKSRC 位来实现,比如,CLKSRC 位为 1 时,选择 Peripheral 时钟(ipg_clk),为 2 时,选择 High - frequency 参考时钟(ipg_clk_highfreq),为 3 时,选择 Low - frequency 参考时钟(ipg_clk_32k)。当信号出现设定的触发沿跳变时,定时器的捕获寄存器就会保存当下的计数器值,借此可以计算信号的脉宽等时间参数。
2025-09-16 09:13:28
384
原创 嵌入式第五十三天(设置时钟)
它能检测出参考信号和反馈信号之间的相位差和频率差,并输出相应的控制信号,这个控制信号会被用于后续的环路滤波等操作,从而调整PLL的输出,使整个锁相环系统的输出信号与参考信号保持同步。在电子系统中,常用于生成稳定、精确的时钟信号,为各种数字电路和通信系统提供时序基准。通过预分频,可以得到不同频率的时钟信号,以满足系统中不同模块对时钟频率的需求,灵活调整时钟的速率。同时有4个PFD,分别对应不同的PLL,用于生成多种不同频率的时钟信号,为芯片内的各个功能模块提供时钟支持。
2025-09-15 20:12:37
259
原创 嵌入式第五十二天(GIC,协处理器,异常向量表)
异常向量表重映射的原因:默认情况下,异常向量表在低地址(如0x00000000),但系统运行时,可能需要把异常向量表放到其他地址(比如更高的内存地址,方便操作系统或应用程序灵活管理内存空间),这样能更合理地利用内存,也便于对异常处理程序进行组织和管理。重映射方法:通过设置协处理器(如CP15)中的相关寄存器(比如向量基址寄存器),将异常向量表的基地址修改为目标地址,使得处理器在处理异常时,能到新的地址去获取异常处理程序的入口。3. 中断屏蔽与使能:支持全局或单个中断的屏蔽(禁止响应)与使能(允许响应)。
2025-09-12 21:32:56
274
原创 嵌入式第五十一天(使用C语言点亮LED1,蜂鸣器)‘
objcopy:是二进制文件.bin转换器,作用是:①在不同格式的目标文件之间进行转换;3.1.先设置一个代码有关的段.text的存储区域,设置初始地址为0x87800000,2.设置一个存放只读数据段;objdump:是目标文件分析器/反汇编器,作用是:①将机器码反汇编为汇编代码;ld:是GNU连接器(GNU Linker),作用是:①将多个目标文件链接成可执行文件;.bss段保存的是是未初始化或初始化为0的数据,在运行时会被自动清零;2.elf文件的.text段保存的代码相关的部分。
2025-09-11 22:39:48
230
原创 嵌入式第四十九天(ARM汇编指令)
8bit 常数范围(0~255),位移的步进值是以2为单位(即实际位移 2 * rotate 位),可以表示循环有以(0~30)偶数位: 0、2、4、6、8、10、12、14、16、18、20、22、24、26、28、30。如果能找打这个数,那么待保存的数就是立即数,否则就不是。arm体系采用的方案是满减,但是在进行操作之前,我们必须告诉2440栈底的位置,这里我们把栈底设置为0x40001000,从地址0x40000000开始的0x1000这段内存空间对应的是2440内部的一段ram,总共4k。
2025-09-09 22:19:11
964
原创 嵌入式第四十八天(ARM架构,相关寄存器与异常处理)
指令集(Instruction Set)是计算机处理器能够识别和执行的操作命令的集合,是硬件与软件之间的接口。它定义了处理器支持的基本操作,如算术运算、逻辑运算、数据移动和控制流程等。
2025-09-08 19:24:59
1048
原创 嵌入式第四十六天(51单片机(通信))
一.串行通信与并行通信1.- 串行通信:数据一位一位地依次传输,只需要一条或很少的几条传输线,适合长距离传输,但传输速度相对较慢。例如,计算机的串口(COM口)通信就是串行通信。2.- 并行通信:数据的各位同时传输,需要多条传输线(一般为8的倍数,如8位、16位、32位等),传输速度快,但传输线多,成本高,适合短距离高速传输。例如,计算机内部的总线(如PCI总线)、打印机的并行口通信都属于并行通信。3.
2025-09-05 20:44:26
1184
1
原创 嵌入式第四十六天(51单片机(中断,定时器))
中断向量表是存储于内存固定地址的核心数据结构,其本质是建立 “中断号(唯一中断标识)” 与 “中断服务程序(ISR)入口地址” 的一一映射,为 CPU / 内核提供中断响应时快速定位服务程序的 “索引表”,是中断机制高效寻址的基础。当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完成以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。内核跳转到该中断对应的 “中断服务程序” 入口,执行预设的处理逻辑,这是中断的核心处理环节。
2025-09-04 20:47:17
960
原创 嵌入式第四十五天(51单片机(led,数码管))
MCU(微控制器):集成了CPU、内存、外设等的单片芯片,常用于嵌入。CPU(中央处理器):计算机的核心部件,负责执行指令和处理数据。可编程的引脚,可通过软件控制其输入或输出模式,用于连接外部设备。MPU(微处理器):通常指更通用的处理器,强调计算能力。GPU(图形处理器):专用于图形和并行计算的处理器。P1寄存器:在数码管模块中使用,用来选择点亮的位区。是指能够操作硬件的,具有固定地址的内存空间。P0寄存器:用来选择点亮的段区。P2寄存器:LED灯点亮。
2025-09-03 21:20:46
255
原创 嵌入式第四十二天(数据库,网页设计)
SQLite3 通过事务机制确保数据操作的原子性、一致性、隔离性和持久性(ACID)。事务的开启方式直接影响性能和数据安全。
2025-09-03 21:00:33
204
原创 嵌入式第四十天(TCP并发服务端(IO多路复用))
用户调用 epoll_wait 时,只需直接从就绪链表中获取就绪的 FD 即可,无需遍历所有注册的 FD,这也是 epoll 相比 select/poll 高效的关键原因之一。红黑树的特性(有序、查找/插入/删除效率高,时间复杂度为 O(log n))保证了 epoll 能高效管理大量的文件描述符,即使监控的 FD 数量庞大,相关操作也能保持较好的性能。总结来说:epoll 通过红黑树存储所有注册的待监控 FD,通过就绪链表存储已触发 IO 事件的 FD,两者配合实现了高效的 IO 多路复用管理。
2025-08-28 18:59:49
359
原创 嵌入式第三十六天(网络编程(TCP))
4. 客户端→服务器(ACK=1,seq=u+1,ack=w+1):客户端收到服务器的FIN后,回复确认报文(ACK=1),ack=w+1(确认收到服务器的终止请求),序列号为u+1。3. 服务器→客户端(FIN=1,ACK=1,seq=w,ack=u+1):服务器数据发送完毕后,发送自己的终止请求(FIN=1),同时再次确认ack=u+1,序列号为w。1. 客户端→服务器(FIN=1,seq=u):客户端数据发送完毕,发送终止连接请求(FIN=1),序列号为u。客户端进入“FIN-WAIT-1”状态。
2025-08-24 23:12:26
648
原创 嵌入式第三十五天(网络编程(UDP))
Linux下的网络编程:目的:不同主机进程间通信。1.主机与主机之间物理层面必须互通。2.进程与进程间在软件层面必须互通。
2025-08-22 22:41:45
220
原创 嵌入式第三十一天(线程间的机制,IPC机制)
死锁是指在多进程或多线程环境中,两个或多个进程(线程)相互等待对方释放资源,而陷入无限期阻塞的状态。- 不可剥夺条件:已分配的资源不能被强制剥夺,只能由持有资源的进程(线程)主动释放。- 持有并等待条件:进程(线程)已经持有至少一个资源,同时又在等待其他资源。- 循环等待条件:多个进程(线程)之间形成一种头尾相接的循环等待资源关系。- 互斥条件:资源只能被一个进程(线程)占用,无法同时被多个使用。进程间空间独立,无法直接通信,需要IPC机制实现通信。1.进程间通信:IPC机制。信号:进程间通知机制。
2025-08-18 18:47:44
291
原创 嵌入式第二十九天(进程的回收,线程)
编译:使用 pthread 库的程序在编译时,需要链接 pthread 库,例如在 Linux 下使用 gcc 编译时,需要加上 -pthread 选项,如 gcc your_file.c -o your_program -pthread。- execl(path, arg0, arg1, ..., (char*)NULL) :参数以列表形式传递, path 为程序路径,后续参数为命令行参数,需以 NULL 结尾。如果将其设置为 NULL ,则表示使用默认的线程属性。
2025-08-15 19:08:38
510
原创 嵌入式第二十八天(程序与进程)
fork() 是 Unix/Linux 系统中用于创建新进程的系统调用,它会复制当前进程(称为“父进程”),生成一个新进程(称为“子进程”)。- 调用一次,返回两次:父进程中返回子进程的 PID(进程 ID,非负整数),子进程中返回 0。- 优先级调度:为进程分配优先级,高优先级进程优先获得CPU,可分为抢占式(高优先级进程可打断低优先级进程)和非抢占式。- 先来先服务(FCFS):按进程到达顺序分配CPU,简单但可能导致“短进程等待长进程”。- 缩短周转时间:进程从提交到完成的总时间更短。
2025-08-14 19:10:27
244
原创 嵌入式第二十七天(UI相关技术(framebuffer))
原理:将显卡硬件结构抽象掉,通过Framebuffer的读写直接对显存进行操作,用户可将其看成显示内存的映像,映射到进程地址空间后进行读写,写操作会立即反映在屏幕上。- 定义:Framebuffer是一段随机访问内存(RAM)区域,包含用于驱动视频显示的位图,其中的数据代表了一帧完整视频图像中的所有像素。一.framebuffer显示操作流程。
2025-08-13 21:37:36
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅