自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 问答 (1)
  • 收藏
  • 关注

原创 Ivpu任务队列详解

本文对比了Intel VPU和AMD XDNA架构的核心差异:Intel VPU采用SHAVE向量核阵列和CMX共享暂存器,指令存储在主机DDR中运行时加载;而AMD XDNA采用2D空间阵列,每个Tile有16KB程序存储器。在任务队列方面,Intel使用嵌入Job结构的一次性BatchBuffer,AMD则采用持久化的64MB InstructionBuffer。此外,Intel NPU编译生成包含多个预编译kernel的ELF文件,运行时根据需要组装BatchBuffer调用具体kernel。两种架构

2026-04-09 15:38:13 330

原创 AMDXDNA的Instruction Buffer

摘要:AMD NPU中的Instruction Buffer并非存放微码,而是存储由ERT解析执行的ctrlcode操作指令,包括DMA、配置等操作。该64MB缓冲区通过PASID保护,并映射到用户空间。用户通过ERT_START_NPU命令提交任务,复用静态编译的ctrlcode实现高效推理。整体流程包括编译工作负载、创建上下文、复制ctrlcode、提交命令缓冲区,最后由ERT执行指令并完成计算。这种设计避免了主机频繁配置DMA的低效问题。

2026-04-08 15:17:38 318

原创 AMDXDNA任务队列详解

本文分析了AMD XDNA架构的核心设计和工作流程。该架构采用2D阵列结构,包含计算Tile和内存Tile,每个Tile配备独立处理器和L2缓存,通过片上网络连接。任务队列存放command buffer,由MERT和ERT两级控制器管理执行流程。文章详细解析了用户层构造command buffer、驱动转换到固件消息的格式转换过程,并阐述了kernel微码的加载机制(通过PDI/ELF文件配置到Tile的16K Program Memory)。最后描述了从Context创建到任务执行的整体流程,强调该架构

2026-04-08 14:11:08 422

原创 浅析Intel和AMD的Npu通信机制

本文对比分析了Intel和AMD在Linux内核中NPU驱动的通信机制差异。Intel的ivpu驱动采用DDR内存共享架构,通过IOMMU实现CPU与NPU的直接内存访问,适合多任务场景;而AMD的amdxdna驱动则使用PCIe设备的BAR空间和Mailbox机制进行通信,基于传统加速卡架构。文章详细阐述了两者的内存管理方式、通信流程及硬件设计特点,揭示了不同架构在数据一致性、通信效率等方面的技术取舍。

2026-03-31 15:20:10 336

原创 NCSI开发指南(三)

摘要:NCSI网卡需通过设置过滤寄存器处理共享网口的报文转发,包括广播包、单播包和VLAN过滤等关键命令配置。IPv6报文过滤需通过邻居发现协议自学习实现。真机调试中,抓包分析是解决疑难问题的关键,如通过RMII总线数据流分析丢包原因。当多网卡共享总线时,需正确处理select/deselect命令以避免总线竞争,修改固件行为将报文缓存后再转发可解决丢包问题。

2025-12-26 15:35:21 862

原创 NCSI开发指南(二)

本文介绍了NCSI网卡固件的开发流程,重点针对网卡侧(从设备)而非BMC侧(主设备)的实现。开发过程分为三步:首先基于DSP0222协议规范实现NCSI标准命令响应(如ClearInitialState、SelectPackage等命令);其次在本地通过测试程序验证命令格式正确性,使用ncsimaster工具进行调试;最后上真机测试,通过观察服务器启动时下发的命令序列来验证协议实现。文章强调硬件通路通常采用RMII总线,并指出调试时应优先确保NCSI控制命令通道正常工作。开发中需注意解决依赖库等问题(如li

2025-12-25 17:50:12 641

原创 NCSI开发指南(一)

摘要:本文介绍了BMC(基板管理控制器)的基本概念及其在服务器带外管理中的关键作用。BMC通过独立于主CPU的方式实现远程电源控制、串口重定向、KVM、硬件监控等功能,相比带内管理具有成本优势。文章还阐述了NCSI(网络控制器边带接口)标准,该技术可降低布线成本并提高管理效率。最后,详细说明了BMC IP地址获取方法及NCSI功能测试要点,包括网络连通性、压力测试、WOL功能验证等场景的测试方法,为服务器带外管理提供了完整的技术参考。

2025-12-25 14:36:33 943

原创 BLE透传速率调优(三)

文章摘要:本文探讨了蓝牙LE传输性能调优的关键点。首先分析了HCI buffer大小对流控的影响,建议将buffer从4个包调整为6个包以提升传输速率。其次讨论了MTU设置优化,指出251字节是理想值,可充分利用LL层能力避免分包。文章还比较了Indication和Notification的可靠性,说明Notification的速率统计在Host端进行是可靠的,因其采用LL层自动重传机制。最后建议近距离优先使用2mphy传输,通过抓包分析包长、连接间隔等参数来最大化带宽利用率。(149字)

2025-08-18 09:55:19 835 2

原创 BLE透传速率调优(二)

摘要:本文分析了蓝牙协议中MDbit=1时应连续发送多包但实际只发一包的问题。通过波形分析和代码调试,发现问题的根源在于接收端出现sync error导致提前关闭接收窗口,而非发送端问题。最终通过调整RF时序参数(将rxpathdly改为13us)解决了TX到RX转换的同步问题,使连接事件能正常发送多个数据包,传输速率提升至70kb/s。文中详细记录了使用逻辑分析仪和trace宏调试的过程,揭示了CEVA芯片设计中TX中断与ACK接收的关联特性。

2025-08-15 11:05:27 753

原创 BLE透传速率调优(一)

本文探讨了BLE透传速率调优的方法与问题。通过分析MTU设置、流控空间和包长参数对传输速率的影响,发现了导致速率低下的关键原因:1)控制器内存不足导致死机,需调整流控设置;2)控制器包长设置错误,将最小值误设为最大值,修复后速率从极低提升至14kb/s。文章以btstack的gatt_streamer_server应用为例,详细记录了调试过程,包括HCI日志分析、抓包验证和代码修复步骤,展示了BLE5.2核心在优化传输速率时的实际表现和调优思路。

2025-08-15 10:59:55 827

原创 安全配对(二)

摘要:蓝牙低功耗(BLE)安全配对流程分为三个阶段:Phase1交换配对特征;Phase2通过ECDH算法生成DHKey,使用f5算法派生出LTK和MacKey实现加密通信,f6算法进行二次认证;Phase3通过加密通道分发IRK等特定密钥用于快速重连和隐私保护。整个过程涉及椭圆曲线加密、AES-CMAC等算法,其中ECDH计算耗时较长但增强了安全性,能有效防范中间人攻击。配对完成后存储的LTK和IRK等密钥可确保后续通信的安全性和设备身份识别。(149字)

2025-08-13 10:32:16 1075

原创 安全配对(一)

本文分析了蓝牙安全配对(Secure Pairing)与Legacy配对的差异,重点剖析了ECDH密钥交换过程的时间消耗问题。通过开发HCILOG与空中包同步分析工具,作者发现250ms的timer设置导致Phase1延迟,修改为1ms后优化至75ms。研究揭示了PublicKey预生成机制和DHKey计算的耗时本质,指出非对称加密虽然安全但计算复杂,导致配对速度显著慢于Legacy方式。文章生动地将技术细节比喻为"闪电侠"与"树懒"的对比,既解释了蓝牙安全机制,又揭

2025-08-13 10:28:49 1220

原创 btstack移植之legacy配对

legacy配对卡死原因分析

2025-07-17 13:57:17 896

原创 蓝牙开发那些事之btstack移植——蓝牙配对(一)

btstack 安全配对调试

2025-07-17 13:51:50 1371

原创 蓝牙开发那些事之重传大法

蓝牙的重传是协议规定好的,一般不需要去改代码,但是某些特殊情况下,在实战中还是有应用的,所以了解下重传的机制,并结合实战了解下

2025-07-03 16:01:00 924

原创 蓝牙开发那些事之蓝牙音响数据大堵车

流控对于蓝牙应用开发来说非常的重要,本文就是实战例子

2025-07-03 15:51:59 1000

原创 蓝牙开发那些事之聊一聊hcilog

蓝牙的非常重要的调试手段——hcilog

2025-06-25 16:07:38 1550

原创 智能网卡linux驱动分析

某款智能网卡的驱动代码分析

2025-06-23 10:17:03 1039

原创 蓝牙开发那些事之btstack移植(3)

btstack移植后跑一跑ble 的central例程,看看有什么问题

2025-06-20 11:31:50 772

原创 蓝牙开发那些事之btstack移植(2)

btstack移植之二,第一回我们基本完成了接口,这一回我们尝试一下基本的demo,看看连接是否ok

2025-06-19 17:11:53 1056

原创 蓝牙开发那些事之btstack移植(一)

这个hci_packet_buffer_reserved,实际上设置的原因,也是上文说过的,大多数的场景,比如说串口,是一个异步的接口,所谓异步,就是指代码调用发送的时候,实际上并没有发送完。可以看到host协议栈会直接调用hci层的hci_send_2_controller的接口,其参数是通过一个叫做KE_MSG_ALLOC的函数生成的,也就是说,ceva的协议栈的hci接口传递的参数都是kernel message,一种ceva协议栈内部定义的东西。system tick的接口实现,AI完全可以做到。

2025-06-18 15:23:20 911

原创 蓝牙开发那些事之PTS

ble的pts dongle环境搭建

2025-06-17 17:28:53 1061 2

原创 蓝牙开发那些事之省电大揭秘

在这种情况下,有一点点不同的是,由于sniff mode的发起方还是手机(因为只有audio source才知道什么时候开始播放音乐,什么时候停止播放音乐),所以,在进入sniff mode之后,作为master的耳机定时在sniff anchor打开接收,接收的包不是poll,而是null。在延时敏感的蓝牙音频领域,这一点还挺重要的。经典蓝牙的两个设备建立acl连接后,主设备为了监督链路状态,会定期发送一种叫做POLL的数据包,从设备收到这种包之后必须回复,哪怕没有信息需要回复,也得回一个NULL包。

2025-06-10 11:39:01 862

原创 蓝牙开发那些事之btstack内存管理篇

btstack的内存管理分析

2025-06-10 11:33:27 583

原创 蓝牙开发那些事之ceva controller代码解读

对比ceva的经典蓝牙和ble的controller在软件上的差异点

2025-06-10 10:16:01 911

原创 蓝牙开发那些事之Ellisys逻辑分析接口的妙用

ble连接阶段可以分成广播阶段和连接阶段,第一阶段的广播阶段,可能收到的包有两种,一种是scan_req,(必须是可扫描广播包才会响应),一种是connect ind,只有能够正常收到这第二种包之后,才能进入第二阶段。现在可以进入第二阶段,画一下流程图,感觉上是切换piconet导致的,之前的scan resp是在自己的piconet上,而之后需要切换到initiater的piconet了。”小张戴上侦探帽,开始“审讯”BLE芯片。掏出手机,打开‌nRF Connect‌,点击“Connect”,然后……

2025-06-10 09:59:13 954

原创 蓝牙开发那些事儿12——(记一颗BLE芯片BringUp折腾过程)

蓝牙这个系列已经很久很久没有更新了,感慨良多。现在写这篇文章主要是BringUp一颗蓝牙芯片的过程中遇到了一些奇怪的问题,想了一些办法,一一克服了,看看对其他做蓝牙的同学有没有启发。同时也安利一个叫做HACKRF的设备。借助于目前软件定义无线电的飞速发展,在定位射频类问题的时候,真的已经比以前什么手段都没有的时候快多了也方便多了,一个HACKRF的设备大概也就700多元,最后解决了困扰我数周的问题。目前这家公司是做BLE芯片的,用的CEVA的蓝牙5.2的IP核,在我来这家公司之前,蓝牙的协议栈和软件部分由深

2025-04-18 16:16:21 1339

原创 RDMA技术浅析(三)

环境纸上谈兵了这么多,我们还是来做一下rdma的测试看看。公司正好有mellanox的网卡,网卡是[root@localhost ~]# lspci -vvv |grep Eth01:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]01:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 L

2022-04-11 10:11:46 2224

原创 RDMA技术浅析(二)

本章主要探讨RDMA软件相关的部分。一、名词解释首先解释一下几个名词:rdma-core指开源RDMA用户态软件协议栈,包含用户态框架、各厂商用户态驱动、API帮助手册以及开发自测试工具等。rdma-core在github上维护,我们的用户态Verbs API实际上就是它实现的。https://github.com/linux-rdma/rdma-core代码目录结构如下:其中比较重要的几个目录是:libibverbs以ibv为前缀,这里的ib并不代表infiniband

2022-04-08 09:37:46 3277

原创 RDMA技术浅析(一)

本章主要是集合了一些概念性的东西做了一些整理,后续会看一下RDMA的代码和实际使用的例子。一、RDMA概述传统内存访问需要通过CPU进行数据copy来移动数据,通过CPU将内存中的Buffer1移动到Buffer2中。DMA模式:可以同DMA Engine之间通过硬件将数据从Buffer1移动到Buffer2,而不需要操作系统CPU的参与,大大降低了CPU Copy的开销。类似地,RDMA是一种host-offload, host-bypass技术,允许应用程序(包括存储)在它们的内存空间之

2022-04-07 10:00:40 2773 1

原创 DPDK踩坑记(一)

公司的新产品是一款服务器端的网卡芯片,支持各种密码学计算offload,是清华大学的可重构结构,还挺牛逼的,不过再怎么牛逼,这还是一块网卡芯片,上网是主要的功能,所以最近入坑DPDK了。之所以说入坑,是因为网络方面完全是小白,学习的过程就是不断填坑的过程。dpdp网上的资料已经挺多的了,我主要把自己学习过程中遇到的问题记录下来,如果觉得很小儿科的大神可以飘过了......硬件环境:(主机Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz + 我司的n10芯片网卡)*..

2022-03-18 16:50:10 3793 5

原创 USB IP核FPGA调试(三)

硬件修复上节提到的单字节读写问题后,就可以继续往下跑了。我们需要把usb设备枚举成一个rndis设备,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。现在的几个buffer是这样分配的:1.控制传输的setup transaction部分,其中的data放在g_ep0_setup_pkt(0x22000)2.控制传输如果是标准控制传输,其中的data transaction部分,放在g_ep0_status_b

2022-03-09 10:42:26 3231

原创 USB IP核FPGA调试(二)

上次说到我们的USB发送会多一个字节的问题,原因其实没有调查清楚。但是一条道走不通的话就换一条道嘛,UTMI接口有8bit单向和16bit双向模式的区别,我们之前使用的是8bit单向模式,抱着试试看的心理,硬件同事又改了一个UTMI 16bit的版本(我司另外一个项目了解下来也是16bit接口),果然没有这个多发一个字节的毛病了。改成16bit utmi后,软件方面需要改一个usb2phycfg,一开始utmi clock还是60Mhz,不是30Mhz的,不对。后来查了一下,usb2phycfg配置

2022-03-06 09:08:07 1246 2

原创 USB IP核FPGA调试(一)

synopsys的usb dwc3 ip核调试已经开始一周多了,之前已经先行调通jlink和串口等常规调试手段,我们目前usb作为device端的软件已经准备好了,上周本来准备插上pc就能愉快地枚举跑起来,但是好事多磨,连get descriptor的第一个transfer都没跑完。从软件打印来看,这个transfer中第一个transaction,也就是setup包data packe收的是对的,但是第二个transaction,因为是我们发数据,就开始出现不正常了。工欲善其事必先利其器,后来我们

2022-02-28 19:06:49 2842 4

原创 蓝牙加密算法以及其和HTTPS加密的异同

前言文章开始之前,我们先来看几个图片还记得最早期的手机,蓝牙配对需要输入四个数字的pincode了吧?为啥后来配对的图片变成这种了呢?这背后的技术或者说标准到底经历了什么?这篇文章希望能这个问题说清楚,同时既然说到加密算法,我们也可以把蓝牙世界和HTTPS世界做一个对比,会发现两者之间有很多的共同点,毕竟,都是通信范畴的东西。概念扫盲密码学体系是近几十年已经成熟起来的体系,我们这里不去展开论述,但是一些关键的信息还是我们必须了解的。在加密领域,我们首先要了解.

2022-01-25 15:39:18 7803 3

原创 蓝牙开发那些事儿(11)——BLE愉快地交互

上一章手机和flip4已经建立了连接,接下来的数据包格式就是data channel pdu了。Data channel pdu的格式如下:之前我们说过,和经典蓝牙不同的是,LE只有一个header,而BR的包头有两个——packet header和payload header,实际上这里的LLID类似于BR的payload header中的LLID,这里的NESN和SN类似于BR的packet header中的SEQN, 当然也并不完全一样,前者收发双方都维护一个sequence num.

2020-08-14 15:31:18 2261 4

原创 蓝牙开发那些事儿(10)——初识BLE

其实LE和BR/EDR完全是两种不同的东西,物理层的channel数减少了一半,AFH调频算法有了新的改进,应用场景也不同,LE主要是应用于物联网,所以从设计上来讲,有以下考虑:功耗低,数据量少,基于这个考虑,和传统蓝牙不同的是,很多场景下,BLE并不依赖于有连接的方式,无连接的方式具备功耗低,使用时间更长的优点,比如BLE的beacon技术就是一个设备定时发非连接广播包,通常要求这样一个节点,可以工作一到两年左右。虽然BR也有广播的内容,但是在BLE的领域里,广播的重要性被强化了。 因为都是蓝牙

2020-08-13 09:03:45 2439 4

原创 蓝牙开发那些事(9)——结合代码看a2dp协议

上一章讲了一下avdtp的连接过程,这一章我们看一下btstack的实例。因为a2dp是一个音频传输的框架协议,具体的使用已经牵涉到应用层了,比如说我们的设备是个音箱设备还是个音源设备,我们目前是个音箱设备,所以可以看一下a2dp_sink_deom.c。其中首先调用a2dp_and_avrcp_setup函数进行了一系列的初始化,从这个函数名就知道,初始化的内容包括了a2dp协议和avrcp协议,a2dp之前我们已经讲了其基础协议avdtp,avrcp的话呢是基于avctp协议的,AVCTP协议.

2020-08-06 11:39:45 3403 2

原创 蓝牙开发那些事儿(8)——avdtp连接过程

上一章中的最后,我们看到一条avdtp的l2cap channel已经建立好了,接下来avdtp可以开始走起来了。Avdtp的文档又是一个140多页的庞然大物,全部看下来东西还是挺多的。Avdtp是a2dp(advanced audio distribution protocol)的基础协议,一般来说,avdtp的l2cap channel是需要建立两条的,这里先建立第一条,也就是signal channel(这个说法和l2cap的signal channel好接近,大体上,可以认为signal c

2020-08-05 17:15:36 4324

原创 蓝牙开发那些事儿(7)——l2cap层连接过程

L2cap层是连接hci和上层profile的中转站,我们之前分析包格式的时候就说过,payload header中的llid如果标示是acl-u的话,说明就是个l2cap包。上层profile在连接的时候,都需要先建立l2cap逻辑链路,每个逻辑链路分配cid(channel id),这也是l2cap最重要的功能:协议/信道多路复用然后比较重要的是,l2cap提供分包和重组功能,比如说上层的包比较大,controller支持的包比较小,就有可能需要分包了,我们前文说过,payload header.

2020-08-04 15:31:49 5862 7

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除