bsp::ethernet_phy::DP83822Phy
上游未提供类型说明。
继承关系
- 基类
IPhy公开
构造与析构
4DP83822Phy
bsp::ethernet_phy::DP83822Phy::DP83822Phy (DP83822Phy &&)=delete
上游未提供说明。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:106DP83822Phy
bsp::ethernet_phy::DP83822Phy::DP83822Phy (ETH_HandleTypeDef ð, std::uint32_t address) noexcept
只保存配置的构造函数:不访问硬件、不产生总线流量、不会失败。 eth 已存在的 ETH 句柄,借用并保存引用;其生命周期须覆盖本对象。 address 原理图确定的 PHY 地址(0–31),或 AutoAddress 自动探测。 构造后对象尚未就绪(status() == NotInitialized);必须在 HAL_ETH_Init 完成、 MDIO 时钟与 HAL_GetTick() 可用之后调用 start(config)。因此构造函数可安全用于 静态存储期对象。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:70DP83822Phy
bsp::ethernet_phy::DP83822Phy::DP83822Phy (const DP83822Phy &)=delete
上游未提供说明。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:104~DP83822Phy
bsp::ethernet_phy::DP83822Phy::~DP83822Phy ()=default
析构不访问硬件;PHY 与 ETH 均保持原状。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:102成员函数
19applyConfig
PhyResult bsp::ethernet_phy::DP83822Phy::applyConfig (const PhyLinkConfig &config) noexcept
读取真实现状并按 config 配置 ANAR/BMCR;相同有效配置不重复写入。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:157configureLink
PhyResult bsp::ethernet_phy::DP83822Phy::configureLink (const PhyLinkConfig &config) noexcept override
配置自动协商通告掩码或强制单一模式。 config 非法返回 InvalidArgument,器件不支持返回 Unsupported,均不写寄存器。 status() NotInitialized 表示!= Ok(不访问硬件);ReadError 读取现状失败 (对象仍就绪);WriteError 写入失败使对象失效;相同有效配置不重复写入并返回 Ok。 自动协商配置要求器件支持自动协商(start() 时缓存的能力),否则返回 Unsupported; 强制模式不要求该能力。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:142failAfterWrite
PhyResult bsp::ethernet_phy::DP83822Phy::failAfterWrite () noexcept
start() 写失败后使对象失效(status_ = WriteError、address_ = 0);可被下一次清除。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:173getCapabilities
PhyResult bsp::ethernet_phy::DP83822Phy::getCapabilities (PhyCapabilities &capabilities) noexcept override
start() 读取时缓存的器件能力,不访问硬件。 capabilities 仅在返回 Ok 时写入缓存值。 status() NotInitialized 表示!= Ok,输出保持不变。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:131operator=
DP83822Phy & bsp::ethernet_phy::DP83822Phy::operator= (DP83822Phy &&)=delete
上游未提供说明。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:107operator=
DP83822Phy & bsp::ethernet_phy::DP83822Phy::operator= (const DP83822Phy &)=delete
上游未提供说明。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:105probeAddress
PhyResult bsp::ethernet_phy::DP83822Phy::probeAddress (std::uint32_t address, bool &matched) noexcept
在指定地址读取 PHYIDR1/2 并严格比对型号族 ID。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:165readAndCacheCapabilities
PhyResult bsp::ethernet_phy::DP83822Phy::readAndCacheCapabilities () noexcept
从 BMSR 检测器件能力并缓存;无任何支持模式时返回 Unsupported(不支持自动协商不算失败)。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:171readLink
PhyResult bsp::ethernet_phy::DP83822Phy::readLink (PhyLinkState &link_state) noexcept override
读取当前链路状态。 link_state 仅在成功时写入解码后的链路状态。 status() Ok 成功(含正常断链 Down);NotInitialized 表示!= Ok(不访问 硬件);ReadError 表示 MDIO 读取失败。 失败时 link_state 保持不变。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:124readRegister
PhyResult bsp::ethernet_phy::DP83822Phy::readRegister (std::uint16_t reg, std::uint16_t &value) noexcept
读取一个 PHY 寄存器低 16 位;失败时不改动 value。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:159resetAndConfigure
PhyResult bsp::ethernet_phy::DP83822Phy::resetAndConfigure () noexcept
完整复位 PHY 并重新应用默认 Auto-MDIX 配置。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:169restartAutoNegotiation
PhyResult bsp::ethernet_phy::DP83822Phy::restartAutoNegotiation () noexcept override
显式重启自动协商,返回时协商尚未完成。 status() NotInitialized 表示!= Ok(不访问硬件);Unsupported 当前为强制模式 (无写入);ReadError 读取 BMCR 失败(对象仍就绪);WriteError 写入失败使对象失效。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:149selectAddress
PhyResult bsp::ethernet_phy::DP83822Phy::selectAddress () noexcept
按 requested_address_ 绑定地址,或自动扫描 0–31 得到唯一地址。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:167setRegisterBits
PhyResult bsp::ethernet_phy::DP83822Phy::setRegisterBits (std::uint16_t reg, std::uint16_t bits) noexcept
读改写寄存器:只置位 bits 指定的位,其余位保持原值。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:163start
PhyResult bsp::ethernet_phy::DP83822Phy::start (const PhyLinkConfig &config) noexcept override
启动驱动并按 config 配置链路;每次调用都完整重建。 流程:地址校验与 config 形状校验(InvalidArgument,不访问总线)→ 设置 MDIO 时钟范围 → 绑定或探测 PHY 地址 → 通过 PHYRCR bit 15 执行等效硬件复位并等待自清零 → 使能 Auto-MDIX 与 Robust Auto-MDIX → 从 BMSR 检测并缓存能力(只要有一种支持模式即成功, 自动协商能力单独记录)→ 按缓存能力校验 config(不受支持返回 Unsupported,此时可能 已复位并写入寄存器)→ 按 config 下发通告掩码或强制模式(相同有效配置不重复写入)。 config 被原样应用,不会被默认全部模式协商或模式交集替换。可重复调用:中断既有链路并 丢弃此前配置。阻塞调用,复位自清零等待上限 500ms,该上限不是任何上下文下的总耗时上限。 完整复位会重新锁存 strap,芯片可能自行按 strap 启动协商;本接口只保证软件不先 下发额外的默认全部模式协商配置。恢复时由调用方再次传入期望配置,不隐式保存或回退。 配置示例 readLink() start({true, PhyLinkMode::Base10Full | PhyLinkMode::Base100Full}) 仅通告全双工模式; start({false, PhyLinkMode::Base100Full}) 强制 100 Mbps 全双工。两者均须检查返回值, 再通过查询链路;本驱动不启动 MAC,也不更新协议栈状态。 Ok 对象就绪(不表示链路已建立);InvalidArgument 地址或 config 非法 (零总线访问);NotFound/AmbiguousAddress 选址失败;ReadError MDIO 读取失败; ResetTimeout 复位未完成;WriteError 写失败;Unsupported 器件无任何支持模式, 或请求的模式/自动协商不受支持(此前可能已复位或写入寄存器)。 任何失败都使对象不可用,失败后再次调用 start(config) 即可重试/恢复。 config 期望的链路配置;强制模式必须恰含一种模式。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:99status
PhyResult bsp::ethernet_phy::DP83822Phy::status () const noexcept override
start() 查询最近一次的粘性状态。 start() start() Ok 启动成功且对象可用;NotInitialized 尚未成功;其它值表示最近一次失败原因,或运行期写入失败导致对象失效后的 WriteError。该结果不因 其它调用改变。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:115validateConfig
PhyResult bsp::ethernet_phy::DP83822Phy::validateConfig (const PhyLinkConfig &config) noexcept
纯 config 形状校验:空掩码、未知位或强制多模式 → InvalidArgument;不访问硬件。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:153validateConfigSupport
PhyResult bsp::ethernet_phy::DP83822Phy::validateConfigSupport (const PhyLinkConfig &config) const noexcept
按缓存能力校验 config 是否受支持;不受支持返回 Unsupported,不访问硬件。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:155writeRegister
PhyResult bsp::ethernet_phy::DP83822Phy::writeRegister (std::uint16_t reg, std::uint16_t value) noexcept
写入一个 PHY 寄存器;失败返回 WriteError。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:161成员变量
7AutoAddress
std::uint32_t bsp::ethernet_phy::DP83822Phy::AutoAddress
自动探测 PHY 地址的哨兵值:扫描 0–31 并按 PHY ID 匹配。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:59address_
std::uint32_t bsp::ethernet_phy::DP83822Phy::address_
当前绑定地址(0–31);未就绪时为 0。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:177autoneg_supported_
bool bsp::ethernet_phy::DP83822Phy::autoneg_supported_
start() 时缓存的自动协商能力。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:180eth_
ETH_HandleTypeDef& bsp::ethernet_phy::DP83822Phy::eth_
借用的 ETH 句柄,生命周期由调用者保证。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:175requested_address_
const std::uint32_t bsp::ethernet_phy::DP83822Phy::requested_address_
构造时固定的 PHY 地址或 AutoAddress。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:176status_
PhyResult bsp::ethernet_phy::DP83822Phy::status_
start() 与写失败后的粘性状态。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:178supported_modes_
PhyLinkMode bsp::ethernet_phy::DP83822Phy::supported_modes_
start() 时缓存的器件模式。
bsp/ethernet/phy_drivers/dp83822/DP83822Phy.hpp:179