嵌入式系统端口寄存器与错误管理详解
在嵌入式系统中,端口寄存器的管理和错误处理至关重要。本文将详细介绍各类端口寄存器的功能、设置以及错误管理扩展寄存器的相关内容。
1. 端口相关寄存器介绍
1.1 端口本地ackID状态寄存器(Port n Local ackID Status CSRs)
端口本地ackID状态寄存器可由本地处理器和外部设备访问。读取该寄存器可返回设备输出和输入端口的本地ackID状态。其位设置如下表所示:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 - 4 | Reserved | - | 保留位 |
| 5 - 7 | Inbound_ackID | 0b000 | 输入端口下一个预期的ackID值 |
| 8 - 15 | Reserved | - | 保留位 |
| 16 - 23 | Outstanding_ackID | 0x00 | 输出端口未确认的ackID状态,只读 |
| 24 - 28 | Reserved | - | 保留位 |
| 29 - 31 | Outbound_ackID | 0b000 | 输出端口下一个要传输的ackID值,软件可通过写入该值强制重传未确认的数据包以手动实现错误恢复 |
1.2 端口错误和状态寄存器(Port n Error and Status CSRs)
当本地处理器或外部设备希望检查端口错误和状态信息时,会访问这些寄存器。其位设置如下表:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 - 10 | Reserved | - | 保留位 |
| 11 | Output Retry - encountered | 0b0 | 输出端口遇到重试条件,当位13置位时设置,需写入逻辑1清除 |
| 12 | Output Retried | 0b0 | 输出端口收到数据包重试控制符号且无法前进,当位13置位时设置,收到数据包接受或不接受控制符号时清除,只读 |
| 13 | Output Retry - stopped | 0b0 | 输出端口收到数据包重试控制符号且处于“输出重试停止”状态,只读 |
| 14 | Output Error - encountered | 0b0 | 输出端口遇到(可能已恢复)传输错误,当位15置位时设置,需写入逻辑1清除 |
| 15 | Output Error - stopped | 0b0 | 输出端口处于“输出错误停止”状态,只读 |
| 16 - 20 | Reserved | - | 保留位 |
| 21 | Input Retry - stopped | 0b0 | 输入端口处于“输入重试停止”状态,只读 |
| 22 | Input Error - encountered | 0b0 | 输入端口遇到(可能已恢复)传输错误,当位23置位时设置,需写入逻辑1清除 |
| 23 | Input Error - stopped | 0b0 | 输入端口处于“输入错误停止”状态,只读 |
| 24 - 26 | Reserved | - | 保留位 |
| 27 | Port - write pending | 0b0 | 端口遇到需要发起维护端口写操作的条件,仅在设备能够发起维护端口写事务时有效,需写入逻辑1清除 |
| 28 | Port present | 0b0 | 端口在输入端口接收自由运行时钟 |
| 29 | Port error | 0b0 | 输入或输出端口遇到硬件无法恢复的错误,需写入逻辑1清除 |
| 30 | Port OK | 0b0 | 输入和输出端口已初始化并可与相邻设备通信,与位31互斥,只读 |
| 31 | Port uninitialized | 0b1 | 输入和输出端口未初始化且处于训练模式,与位30互斥,只读 |
1.3 端口控制寄存器(Port n Control CSR)
端口控制寄存器包含处理元素上各个端口的控制寄存器位。其位设置如下表:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 | Output port width | 见脚注1 | 端口的操作宽度,只读,0b0表示8位端口,0b1表示16位端口 |
| 1 | Output port enable | 见脚注2 | 输出端口传输使能,0b0表示端口停止,只能路由或响应I/O逻辑维护数据包;0b1表示端口可发送任何数据包 |
| 2 | Output port driver disable | 0b0 | 输出端口驱动禁用,0b0表示驱动开启,0b1表示驱动关闭,用于电源管理 |
| 3 | Reserved | - | 保留位 |
| 4 | Input port width | 见脚注3 | 端口的操作宽度,只读,0b0表示8位端口,0b1表示16位端口 |
| 5 | Input port enable | 见脚注4 | 输入端口接收使能,0b0表示端口停止,只能路由或响应I/O逻辑维护数据包;0b1表示端口可响应任何数据包 |
| 6 | Input port receiver disable | 0b0 | 输入端口接收器禁用,0b0表示接收器启用,0b1表示接收器禁用 |
| 7 | Reserved | - | 保留位 |
| 8 | Error checking disable | 0b0 | 禁用所有RapidIO传输错误检查,0b0表示启用错误检查和恢复,0b1表示禁用 |
| 9 | Multicast - event participant | 见脚注5 | 将传入的多播事件控制符号发送到此端口(仅适用于多端口设备) |
| 10 - 30 | Reserved | - | 保留位 |
| 31 | Port type | - | 指示端口类型,只读,0b0表示并行端口,0b1表示串行端口 |
2. 交换设备相关寄存器
2.1 寄存器映射
对于不包含端点功能的通用设备(通常为交换机),其8/16 LP - LVDS寄存器的映射如下表所示:
| 块字节偏移 | 寄存器名称(字0) | 寄存器名称(字1) |
| — | — | — |
| 0x0 | 8/16 LP - LVDS端口维护块头 | - |
| 0x8 - 18 | Reserved | - |
| 0x20 | 端口链路超时控制CSR | Reserved |
| 0x28 | Reserved | - |
| 0x30 | Reserved | - |
| 0x38 | Reserved | 端口通用控制CSR |
| 0x40 | Reserved | - |
| 0x48 | Reserved | - |
| 0x50 | Reserved | - |
| 0x58 | 端口0错误和状态CSR | 端口0控制CSR |
| 0x60 | Reserved | - |
| 0x68 | Reserved | - |
| 0x70 | Reserved | - |
| 0x78 | 端口1错误和状态CSR | 端口1控制CSR |
| 0x80 - 218 | 分配给端口2 - 14的CSR | - |
| 0x220 | Reserved | - |
| 0x228 | Reserved | - |
| 0x230 | Reserved | - |
| 0x238 | 端口15错误和状态CSR | 端口15控制CSR |
2.2 端口维护块头寄存器
-
端口维护块头0(Port Maintenance Block Header 0)
:包含指向下一个EF_BLK的EF_PTR和标识此为通用端点端口维护块头的EF_ID。其位设置如下表:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 - 15 | EF_PTR | 硬连线指针 | 指向数据结构中的下一个块(如果存在) |
| 16 - 31 | EF_ID | 0x0003 | 硬连线扩展功能ID | - 端口维护块头1(Port Maintenance Block Header 1) :该寄存器保留,所有位均为保留位。
2.3 端口链路超时控制寄存器(Port Link Time - out Control CSR)
端口链路超时控制寄存器包含设备所有端口的超时定时器值。其位设置如下表:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 - 23 | Time - out_value | 全1 | 超时时间间隔值 |
| 24 - 31 | Reserved | - | 保留位 |
2.4 端口通用控制寄存器(Port General Control CSR)
端口通用控制寄存器的位适用于设备上的所有端口,且每个设备只有一份此类位的副本。其位设置如下表:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 0 - 1 | Reserved | - | 保留位 |
| 2 | Discovered | 见脚注1 | 该设备是否已被负责系统配置的处理元素定位,0b0表示未被发现,0b1表示已被发现 |
| 0 - 31 | Reserved | - | 保留位 |
3. 错误管理扩展寄存器
错误管理扩展寄存器主要包括对现有寄存器的添加和新的错误管理寄存器。
3.1 现有寄存器的添加
-
并行和串行逻辑层规范端口n控制CSRs
:添加了以下位:
| 位 | 名称 | 复位值 | 描述 |
| — | — | — | — |
| 28 | Stop on port failed - encountered enable | 0b0 | 与drop - packet enable位一起使用,当错误率失败阈值达到或超过时强制特定行为 |
| 29 | Drop - packet enable | 0b0 | 与stop on port failed - encountered enable位一起使用,当错误率失败阈值达到或超过时强制特定行为 |
| 30 | Port lockout | 0b0 | 清除时,数据包的收发由输出端口使能和输入端口使能位控制;置位时,端口停止,不能收发任何数据包,但输入端口仍可进行训练过程和发送响应链路请求 | - 并行和串行规范端口n错误和状态CSRs :也有相应的位添加,具体可参考前文的端口错误和状态寄存器表。
通过对这些端口寄存器和错误管理扩展寄存器的了解和合理配置,可以更好地管理嵌入式系统中的端口通信和错误处理,提高系统的稳定性和可靠性。
下面是一个简单的mermaid流程图,展示端口错误处理的基本流程:
graph TD;
A[端口操作] --> B{是否遇到重试条件};
B -- 是 --> C[设置Output Retry - encountered位];
C --> D{是否收到重试控制符号};
D -- 是 --> E[设置Output Retried和Output Retry - stopped位];
E --> F{是否收到接受或不接受符号};
F -- 是 --> G[清除Output Retried位];
B -- 否 --> H{是否遇到传输错误};
H -- 是 --> I[设置Output Error - encountered位];
I --> J{是否进入错误停止状态};
J -- 是 --> K[设置Output Error - stopped位];
H -- 否 --> L[正常操作];
在实际应用中,开发人员可以根据这些寄存器的功能和设置,编写相应的代码来实现端口的管理和错误处理。例如,当检测到端口错误时,可以通过写入相应的寄存器位来清除错误标志,恢复端口的正常工作。同时,合理设置超时时间和控制位,可以避免因错误累积导致系统崩溃。
希望本文对嵌入式系统开发人员在端口寄存器管理和错误处理方面有所帮助。后续将继续深入探讨如何根据这些寄存器的特性进行系统优化和性能提升。
嵌入式系统端口寄存器与错误管理详解
4. 端口错误和状态寄存器的深入分析
在前面我们已经介绍了端口错误和状态寄存器的基本位设置,下面进一步深入分析其在实际应用中的作用。
端口错误和状态寄存器能够实时反映端口的工作状态,帮助开发人员及时发现和处理各种异常情况。例如,当
Output Retry - encountered
位被设置时,意味着输出端口遇到了重试条件。此时开发人员需要关注是否是由于网络拥塞、数据包丢失等原因导致的。
当
Output Error - encountered
位被设置时,表明输出端口遇到了传输错误。这可能是由于硬件故障、信号干扰等因素引起的。开发人员可以通过检查相关硬件设备、调整信号传输环境等方式来尝试解决问题。
为了更直观地理解端口错误和状态寄存器的作用,我们可以通过以下表格来总结其关键位的含义和处理建议:
| 位名称 | 含义 | 处理建议 |
| — | — | — |
| Output Retry - encountered | 输出端口遇到重试条件 | 检查网络状况,查看是否有数据包丢失或拥塞 |
| Output Error - encountered | 输出端口遇到传输错误 | 检查硬件设备,调整信号传输环境 |
| Input Retry - stopped | 输入端口处于“输入重试停止”状态 | 检查输入信号源,确保信号稳定 |
| Input Error - encountered | 输入端口遇到传输错误 | 检查输入设备,排查硬件故障 |
5. 端口控制寄存器的实际应用
端口控制寄存器在嵌入式系统中起着至关重要的作用,它可以控制端口的各种行为,如端口的使能、驱动的开关、端口类型的选择等。
5.1 端口使能控制
通过设置
Output port enable
和
Input port enable
位,可以控制端口的传输和接收功能。例如,当需要暂停某个端口的工作时,可以将相应的使能位设置为
0
,此时端口将停止收发数据包,但仍可以进行一些基本的维护操作。
graph TD;
A[开始] --> B{是否需要暂停端口};
B -- 是 --> C[设置Output port enable = 0];
C --> D[设置Input port enable = 0];
D --> E[端口暂停工作];
B -- 否 --> F[端口正常工作];
5.2 电源管理
Output port driver disable
位可以用于电源管理。当系统处于低功耗模式时,可以将该位设置为
1
,关闭输出端口的驱动,从而降低功耗。
graph TD;
A[系统状态] --> B{是否进入低功耗模式};
B -- 是 --> C[设置Output port driver disable = 1];
C --> D[输出端口驱动关闭,降低功耗];
B -- 否 --> E[输出端口驱动正常工作];
6. 交换设备寄存器的配置与优化
对于交换设备,其寄存器的配置和优化直接影响着设备的性能和稳定性。
6.1 端口链路超时控制
合理设置端口链路超时控制寄存器中的
Time - out_value
可以避免因长时间等待响应而导致的系统阻塞。例如,如果网络环境较好,可以适当减小超时时间,提高系统的响应速度;如果网络环境不稳定,则可以适当增大超时时间,确保数据包有足够的时间进行传输和响应。
操作步骤如下:
1. 确定当前网络环境的稳定性。
2. 根据网络环境调整
Time - out_value
的值。
3. 将调整后的值写入端口链路超时控制寄存器。
6.2 设备发现与配置
通过端口通用控制寄存器中的
Discovered
位,可以实现设备的自动发现和配置。当设备被发现后,可以根据其端口数量、类型等信息进行相应的配置,以充分发挥设备的性能。
操作步骤如下:
1. 系统启动时,处理元素扫描网络中的设备。
2. 当发现新设备时,将其
Discovered
位设置为
1
。
3. 根据设备的端口信息进行相应的配置,如端口的带宽分配、传输速率设置等。
7. 错误管理扩展寄存器的综合应用
错误管理扩展寄存器为嵌入式系统的错误处理提供了更强大的功能。通过合理配置这些寄存器,可以实现更精确的错误控制和处理。
7.1 错误阈值控制
Stop on port failed - encountered enable
和
Drop - packet enable
位可以用于控制错误阈值。当错误率达到或超过设定的阈值时,可以采取相应的措施,如停止端口工作、丢弃数据包等。
操作步骤如下:
1. 根据系统的可靠性要求,设置错误率失败阈值。
2. 当错误率达到或超过阈值时,将
Stop on port failed - encountered enable
和
Drop - packet enable
位设置为
1
。
3. 根据具体情况,选择停止端口工作或丢弃数据包,以避免错误的进一步扩散。
7.2 端口锁定
Port lockout
位可以用于锁定端口,防止异常数据包的干扰。当端口出现异常时,可以将该位设置为
1
,暂时停止端口的收发功能,进行故障排查和修复。
操作步骤如下:
1. 检测到端口出现异常情况,如频繁的错误报告、数据包丢失等。
2. 将
Port lockout
位设置为
1
,锁定端口。
3. 对端口进行故障排查和修复,如检查硬件连接、更新驱动程序等。
4. 修复完成后,将
Port lockout
位设置为
0
,恢复端口的正常工作。
通过对端口寄存器和错误管理扩展寄存器的深入理解和综合应用,开发人员可以更好地管理嵌入式系统的端口通信和错误处理,提高系统的可靠性和性能。在实际开发过程中,需要根据具体的应用场景和需求,灵活配置这些寄存器,以实现最佳的系统性能。
超级会员免费看
380

被折叠的 条评论
为什么被折叠?



