- 博客(39)
- 资源 (10)
- 收藏
- 关注
原创 集成电路生产测试中CP针卡(Probe Card)简介
CP针卡(Probe Card)是半导体芯片制造中用于晶圆测试(Chip Probing, CP)的核心组件,其作用是在晶圆未切割封装前,通过探针与芯片的焊盘(Pad)或凸块(Bump)接触,建立测试机(ATE)与芯片之间的电气连接,从而完成电性能和功能测试3510。
2025-05-19 14:33:20
415
原创 SDIO EMMC中ADMA和SDMA简介
(Simple Direct Memory Access)是两种不同的DMA(直接内存访问)模式,用于优化主机控制器与存储器(如eMMC)之间的数据传输效率。(Scatter-Gather I/O),通过链表或描述符表管理多个分散的数据块,无需CPU干预。提供更完善的错误报告机制(如描述符错误状态位),支持更精细的错误恢复流程。描述符结构更复杂,支持链式或多级描述符,可灵活配置多个数据传输任务。需要更复杂的主机控制器硬件支持(如支持64位地址和描述符链表)。错误处理较为基础,通常依赖主机控制器的中断机制。
2025-05-14 20:39:37
387
原创 总线读写outstanding 和 burst-length概念简介
在芯片总线IP(如AXI、AHB、APB等协议)中,Outstanding和Burst-Length是两个关键概念,分别影响总线的并发性和传输效率。Outstanding表示主设备在未收到从设备响应的情况下,能同时发起的独立请求数量,直接影响总线的吞吐量和复杂度。Burst-Length则指单次突发传输中连续传输的数据单元数量,优化传输效率和带宽利用率。Outstanding适合多任务并行请求,而Burst-Length适合连续数据块传输。设计时需根据应用场景(如随机访问或顺序传输)平衡二者,以优化吞吐
2025-05-13 15:51:43
354
原创 ISP gamma校正简介
在 ISP 中,Gamma 校正是连接传感器数据与显示设备的关键桥梁,通过非线性映射优化图像感知质量。其核心目标是:适配人眼与显示设备的非线性响应。压缩动态范围并增强细节。确保跨设备色彩一致性。实际应用中需结合场景需求、显示设备特性及 ISP 算法综合优化 Gamma 值及曲线形态。
2025-05-08 18:04:10
869
原创 CBC(Clock Boundary Crossing)简介
当信号从一个时钟域(由时钟A驱动)传递到另一个时钟域(由时钟B驱动)时,由于两个时钟的相位和频率不同,可能导致信号在接收时钟域中出现亚稳态(Metastability)或时序违规(Timing Violation)。是处理多时钟域信号同步的核心问题,需通过同步器、异步 FIFO 或握手协议解决,并借助 STA、形式验证和仿真确保可靠性。信号在跨时钟域时违反建立时间(Setup Time)或保持时间(Hold Time)。跨时钟域的数据总线(如 FIFO、寄存器同步链)。:门控时钟可能引入隐性跨时钟域问题。
2025-04-30 15:43:41
575
原创 QSPI flash xip模式运行
在做一个项目,调研p-sram当ram用在cadence qspi接口下是否正常,首先用qspi-flash xip模式验证控制器是否支持flash的xip模式。
2025-04-24 22:48:28
428
原创 DES、3DES、SM4 加密算法简介
1975 年(IBM 开发,1977 年被 NIST 采纳为美国联邦标准)。:168 位(实际有效 112 位,因存在中间相遇攻击)。符合中国商用密码标准(GMT 0002-2012)。使用硬件安全模块(HSM)或密钥管理系统(KMS)。:64 位(实际有效 56 位 + 8 位校验)。密钥过短(56 位),无法抵抗现代算力攻击。:2012 年(中国国家密码管理局发布)。:适用于移动设备(如 TLS 1.3)。:1998 年(DES 的增强版)。,并关注算法演进(如抗量子加密)。
2025-04-22 19:15:44
901
原创 linux sysfs使用cat无显示的原因:返回值未赋值
通过结合内核日志、路径验证和代码调试,可快速定位根本原因。在Linux驱动中通过sysfs定义的文件使用。返回值为实际写入的字节数(不包括结尾的。函数中避免阻塞操作(如互斥锁未释放)。)未正确填充缓冲区或返回有效字节数。调用失败(如设备未注册或内存不足)。检查是否有内核Oops或警告信息。文件内容已被缓存,实际数据未更新。函数访问的驱动数据未初始化或为。查看内核日志中的错误信息(如。函数调用前完成数据初始化。(如访问未映射的内存)。文件未生成在预期路径。未正确初始化或未绑定到。检查模块初始化代码中。
2025-04-21 21:25:11
750
原创 linux sysfs的使用
属性文件,常用于暴露设备信息或控制参数。)必须检查返回值,并实现逆向释放逻辑(如示例中的。属性文件,为用户空间提供灵活的设备交互接口。通过上述代码,可以实现在内核驱动中动态管理。若属性可能被多线程访问,需使用锁(如。在Linux内核驱动开发中,用于动态创建/删除设备的。,否则会因设备未注册而失败。)需合理设置,避免安全隐患。创建设备节点,再调用。所有内核资源分配(如。)保护共享数据(例如。
2025-04-21 21:21:23
644
原创 Git 中修改某个特定的commit提交内容
通过上述方法,可灵活修改任意历史提交的元数据或内容。建议在操作前备份分支(如。在 Git 中修改某个特定的提交(commit)通常需要使用。,这会覆盖远程历史记录。确保其他协作者知晓此操作!修改历史提交后,若已推送到远程仓库,需使用。若要修改更早的提交(非最新提交),需使用。在交互式变基中直接删除对应行(或标记为。在打开的编辑界面中,将目标提交前的。如果目标提交是最近的提交(即当前。假设要修改第 2 个旧提交(哈希。在交互式变基中调整提交行的顺序。在交互式变基中标记为。
2025-04-19 22:46:12
601
原创 BT1120 BT656驱动相关代码示例
前些年做视频输出项目的时候用过bt1120 tx与rx模块,现将部分代码进行记录整理。代码功能正常,可正常应用。
2025-04-19 22:24:29
610
原创 linux kernel irq相关函数详解
通过合理使用上述函数,开发者能够高效管理中断资源,确保驱动程序的稳定性和响应能力。在Linux内核驱动开发中,处理中断涉及一系列关键函数,正确使用这些函数对确保驱动的稳定性和性能至关重要。:确保释放正确的中断处理程序,尤其在共享中断时。:中断资源索引(通常为0,表示第一个中断)。:设置中断触发方式(如边沿触发)或共享标志。:设备标识符(用于共享中断时的唯一标识)。:成功返回中断号,失败返回负数错误码。:从设备树或平台资源中提取中断号。:申请中断线并绑定中断处理函数。:解除中断处理函数并释放中断线。
2025-04-19 21:55:12
1046
原创 dev_set_drvdata、dev_get_drvdata使用详解
核心函数和是操作设备私有数据的基础函数,直接通过的// 将数据指针关联到设备:cite[2]:cite[6]// 获取设备关联的数据指针:cite[6]设备类型封装函数平台设备和// 通过平台设备结构体间接调用核心函数// 调用dev_set_drvdata:cite[1]:cite[2]I2C设备和PCI设备和45。
2025-04-19 20:50:00
1033
原创 uboot下读取ubifs分区的方法
其中,CONFIG_MTDPARTS_DEFAULT需要根据实际项目配的值进行写入,与include/configs/ts_tx5xxx.h中的mtdparts定义的内容基本一致,但注意分区表前面的设备要写nand0:。注意:如果在项目运维过程中,定义在include/configs/ts_tx5xxx.h中的分区表有调整,则需要同步更新此处CONFIG_MTDPARTS_DEFAULT中的内容。注:此方法只用于使用spi-nand启动的项目,仅供参考。
2025-04-18 21:01:13
555
原创 【linux模块化编译驱动Makefile异常引发的惨案】
最后发现是ko名字不能与.c文件一致,否则生成.o的时候回产生异常。因内核模块名字与.c名字重合导致多文件编译“undefined!
2025-04-17 22:57:01
1022
原创 链接脚本lds各段简介
链接器脚本(Linker Script,.lds 文件)用于控制程序的内存布局,指定代码、数据、堆栈等段在内存中的位置。以下是关键段的详细解析及写法说明:
2025-04-16 11:26:35
476
原创 C语言malloc类函数详解
在 C 语言中,动态内存管理主要依赖于标准库中的一组函数。:查询实际分配的内存块大小(可能大于请求值)。个元素分配连续内存,并将内存初始化为零。:在栈上分配内存(函数返回时自动释放)。内存内容未初始化(可能包含随机值)。可能返回新地址,需重新接收返回值。:分配指定字节数的未初始化内存。:分配页面对齐的内存(类似。适合分配数组或结构体数组。:调整已分配内存块的大小。,但不受 C 标准约束。:将内存块填充为指定值。内存内容初始化为全零。:释放动态分配的内存。,但对齐到页面大小)。可处理内存重叠区域。
2025-04-09 19:48:36
761
原创 linux shell looop循环写法
shell loop循环的多种写法,根据需求选择合适的方法,并确保循环内有可控的退出机制!如果需要在满足条件时退出循环,可结合。
2025-04-09 15:18:23
589
原创 C语言C11支持的结构体嵌套的用法
C 语言的设计要求类型定义(如structunion)必须在全局或函数作用域中独立存在,无法在另一个结构体内部直接定义新类型。这是 C 语言语法和编译器的限制。总结传统方式:先定义内部结构体,再在外部结构体中包含实例(兼容所有 C 标准)。C11 新特性:在外部结构体中直接定义匿名结构体(更简洁,但需编译器支持 C11)。根据你的编译环境和需求选择合适的方式!
2025-04-08 15:43:34
576
原创 DesignWare AHB DMA的分散聚集模式与链表模式比较
DesignWare AHB DMA的分散聚集模式本质上是链表模式的硬件化实现,通过LLI动态链接非连续内存块,由DMA控制器自动遍历完成传输。高效性:硬件自动管理链表,减少CPU负载;灵活性:支持动态扩展与实时更新;低延迟:中断驱动优化资源利用率。
2025-04-07 12:16:21
1111
原创 DDR中DM DQS信号简介
由于DDR在每个时钟周期的上升沿和下降沿传输数据,DQS的边沿(上升沿和下降沿)为接收端提供了数据采样的精确时间窗口。在DDR(双倍数据速率)内存中,DM(Data Mask)和DQS(Data Strobe)信号是确保高速数据传输可靠性和灵活性的关键。每个DM位对应一个字节(8位)的数据,当DM为高电平时,对应的数据字节被屏蔽,不会被写入内存。:数据信号(DQ)与DQS同步传输(源同步),减少时钟偏移(Skew)的影响。:例如,仅更新64位数据中的低32位,通过置高DM的高4位实现屏蔽。
2025-04-03 14:33:09
637
原创 linux poll、epoll驱动层应用层示例,实现高精度任务处理
(如数据可读/可写),应用层通过文件描述符监控这些事件。实现高效的事件驱动交互,适用于传感器数据采集、异步通知等场景。边缘触发(ET)模式下,必须将文件描述符设置为非阻塞(的驱动层与应用层协作需要内核模块提供。唤醒等待队列,通知应用层事件就绪。通过以上实现,驱动层与应用层可通过。,当写入数据时触发可读事件。和自旋锁保护共享数据(如。避免在中断上下文中直接调用。),并循环读取直到返回。: 创建一个字符设备。方法,通过等待队列(在 Linux 中,
2025-03-31 22:19:17
451
原创 linux Kthread的使用示例
在Linux内核中,kthread(内核线程)用于创建运行在内核空间的后台线程,常用于驱动开发中执行异步任务(如轮询设备状态、数据处理等)。
2025-03-31 21:11:16
1023
原创 linux hrtimer使用简介
在Linux驱动开发中,高精度定时器(hrtimer)的设计旨在提供纳秒级精度的定时功能,其实现基于红黑树算法和硬件时钟事件的支持。
2025-03-31 20:44:22
770
原创 ARM64 嵌入式汇编内存屏蔽指令的写法
在 ARM64 架构中,DSB(Data Synchronization Barrier)和DMB(Data Memory Barrier)是用于强制内存访问顺序的关键指令。DMB确保在屏障的所有内存访问(Load/Store)在屏障的内存访问之前完成,但对指令执行顺序无影响。常用于多核/多线程场景,防止内存访问乱序。
2025-03-31 17:34:36
601
原创 使用AXI DMA封装通用函数替代memcpy,减少cpu占用率,增加拷贝速度
2. 使用hwacc_memcpy可执行程序测试,使用ion申请物理地址的方式invalid cache测试ts_memcpy函数速度,测得 512KB拷贝:约752MB/s,2MB:957MB/s, 4MB: 995MB/s,8MB:1014MB/s。1. 使用hwacc_memcpy可执行程序测试,使用指定物理地址不刷cache测试ts_memcpy函数速度,测得 512KB拷贝:约989MB/s,2MB:1.2GB/s, 4MB: 1.3GB/s。最终通过DMA实现了拷贝数据5倍性能的提升。
2025-03-28 18:51:17
560
原创 DDR2 DDR3 DDR4 linux 驱动开发
正常DDR驱动会放在二级loader或uboot spl中,但在kernel也有处理DDR功能的需求,估在kernel增加DDR驱动用于实现这些特定功能。计划功能点:1.能够观察training眼图,可简介指示非合封的DDR PCB走线情况是否良好2. 支持调试业务的时候修改DDR port的优先级3.可支持DDR频率调整功能4.支持kernel直接retention时调用下电部分代码5.处理DDR相关中断异常。
2025-03-27 18:00:26
180
原创 devm_ioremap_resource映射的内存,不需要iounmap调用
使用映射内存后,模块卸载时无需手动iounmap,内核会确保资源正确释放。这种机制减少了代码冗余和潜在的内存泄漏风险,是Linux设备驱动开发中的推荐做法。
2025-03-27 14:24:03
312
原创 grep + 脚本截取命令的使用
最近在批量检查qspi 启动重复配置的一个问题,需要排查当前用的驱动是哪个,需要用到脚本检查,顺带做了下记录。注释:其中cut -d 是截取文件;cat + grep 是搜索文件中的内容。2.排查真正使用的是哪个驱动。
2025-03-26 16:04:31
277
原创 Flex noc V1.1的qos generator和probe功能总结
最近在编写新版本flex noc驱动,针对新版本功能做了一些记录,方便程序开发。其中针对1.0版本寄存器与功能都做了些减面积的改动,先将主要功能进行梳理记录。
2025-03-21 20:14:15
1117
原创 基于新思ddr控制器与芯动ddr phy的ddr3 retention深度休眠的training数据影响因素实验
为了摸索retention模式下的可靠性范围,做了如下实验。用于评估training值更新阈值如何设定。
2025-03-14 15:22:37
181
原创 基于新思ddr控制器与芯动ddr phy的钰创ddr2、紫光ddr3 retention深度休眠方案
主要讲述新思和芯动IP+钰创DDR2 紫光DDR3 深度休眠retention的流程与详细操作方法和技术难点
2025-03-11 20:59:45
1197
原创 基于DW timer实现RF433MHz无线接受模块linux驱动
本驱动主要利用DW timer定时器触发中断,每80us读取gpio状态,接受RXB62 ASK超外差无线接收模块,通过procfs将收到的gpio 24bit信息显示出来,供上层软件使用,解决了在应用层或kernel层使用cpu定时因为调度影响导致精度不够问题。
2025-01-24 15:49:55
201
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人