/** * @file esc_lan9252.h * @brief LAN9252 EtherCAT 从站控制器(ESC)驱动接口。 * @note 通过 EscExmcBus 16-bit 并行总线访问 LAN9252 寄存器与 PDI 内存。 */ #ifndef COMM_ESC_LAN9252_H #define COMM_ESC_LAN9252_H #include #include /** * @brief LAN9252 ESC 驱动。 * @note 封装 ESC 寄存器读写与 PDI(Process Data Interface)内存块访问。 */ class EscLan9252 { public: /** @brief 初始化 EXMC 总线与 ESC 基本寄存器。 */ static void init(); /** * @brief ESC 自检:读取芯片 ID 寄存器校验。 * @return bool true 表示 ID 匹配(0x87654321),false 表示失败。 */ static bool selfTest(); /** * @brief 读取 ESC 寄存器(16-bit)。 * @param[in] addr 寄存器地址(ESC 寄存器空间偏移)。 * @return uint16_t 寄存器值。 */ static uint16_t readReg(uint16_t addr); /** * @brief 写入 ESC 寄存器(16-bit)。 * @param[in] addr 寄存器地址。 * @param[in] val 待写入值。 */ static void writeReg(uint16_t addr, uint16_t val); /** * @brief 从 PDI 内存读取一块数据。 * @param[in] offset PDI 偏移(字节)。 * @param[out] buf 输出缓冲。 * @param[in] len 读取字节数。 */ static void readPdi(uint16_t offset, uint8_t *buf, size_t len); /** * @brief 向 PDI 内存写入一块数据。 * @param[in] offset PDI 偏移(字节)。 * @param[in] buf 数据缓冲。 * @param[in] len 写入字节数。 */ static void writePdi(uint16_t offset, const uint8_t *buf, size_t len); }; #endif /* COMM_ESC_LAN9252_H */