飞腾x100 vxWorks6.9 UART驱动开发分析

本文介绍了飞腾x100套片中的UART资源,重点讨论了PCIe设备地址的BDF编码,特别是AlternativeRoutingIDInterpretation(ARI)机制如何在PCIeGen3中改变BDF结构。同时,提到了vxWorks代码中存在的问题和解决方案,如对function范围的修正和中断号分配的改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

x100 UART资源描述

从飞腾x100套片软件开发手册描述来看,X100 UART是用X1下function 11-14.
在这里插入图片描述

标题BDF(Bus Number, Device Number, Function Number)

PCIe上所有的设备,无论是Type 0还是Type 1,在系统启动的时候,都会被分配一个唯一的地址,它有三个部分组成:

Bus Number:8 bits,也就是最多256条总线
Device Number:5 bits,也就是最多32个设备
Function Number:3 bits,也就是最多8个功能

ARI介绍

Alternative Routing-ID Interpretation,顾名思义,可替换的Routing ID,意味着这是一种要把Routing ID的部分或全部替换掉的机制。通常来讲,Requester ID和Comleter ID等Routing ID由Bus Number, Device Number, Function Number (BDF) 3个字段组成,其中Bus Number 8-bit,Device Number 5-bit,Function Number 3-bit,一共16-bit。即最多支持256个Bus、32个Device及8个Function。由于PCIe采用端到端的传输方式,每一个链路仅挂载一个设备,Device数量为1,Device Number恒为0,采用5-bit宽的Device Number没有意义;此外3-bit Function Number最高支持8个Function,对有多个VM的SR-IOV系统而言,8个Function稍显不足。

基于以上原因,从PCIe Gen3开始提供一种ARI机制,取消了Device Number字段,合并到Function Number字段中,这样Routing ID便变成了8-bit Bus Number + 8-bit Function Number的格式,最多支持的Bus数量不变,支持的Function数量增大到256个。

vxWorks代码分析

vxWorks PCI总线扫描由于只考虑了function 0-7会导致设备扫描不到,另外菊花链的中断号分配也会错误,修改完这两处,基本就可以按照vxBus编写驱动了

### VxWorks UART驱动实现与使用教程 #### 1. TTY内核驱动中间层的作用 VxWorks在IO子系统层之下提供了一个TTY内核驱动中间层,用于管理串口驱动。这使得开发者可以更方便地处理不同类型的串口设备,而无需深入了解底层硬件细节[^4]。 #### 2. S3C2410A的UART0驱动代码结构 对于基于S3C2410A处理器的开发板而言,UART0驱动的设计涵盖了数据发送接收、波特率配置以及中断服务等功能模块。通过研究具体的驱动源码文件,能够更好地理解这些功能是如何被组织起来并最终集成到整个操作系统中的[^1]。 ```c // 示例:初始化UART0函数片段 void initUart0(void){ // 设置寄存器值以配置UART参数... } ``` #### 3. 飞腾X100平台下的特殊注意事项 当针对飞腾x100架构进行UART驱动开发时,需要注意PCI总线扫描逻辑仅限于Function 0至7之间的情况可能导致某些外设无法正常识别的问题。此外,在多级菊花链接构下正确设置各组件之间的IRQ线路同样至关重要。解决这些问题之后,则可以根据vxBus框架进一步完成其他部分的工作[^2]。 #### 4. ZYQN7000系列的具体实践案例 在一个实际项目中——即ZYQN7000系列产品上实施VxWorks环境迁移的过程中发现,为了避免两个独立UART端口间可能出现的身份冲突现象,建议重新命名对应的节点名称(如由默认改为`uart0`),从而确保后续编译构建过程顺利无误地执行下去[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值