如何通过I2C/smbus控制USB4715?
本帖最后由 steventuring 于 2023-12-27 18:06 编辑如何通过I2C/smbus控制一个USB Hub?这是一个好问题。
USB4715上电后的启动流程如下图,只有进入CFG_SOC阶段才能通过smbus进行初始化的配置。在硬件上要确保两个条件:1.正确上下拉CONFIG_STRAP管脚,在CFG_STRAP阶段确保工作模式是Configuration 5。2. 在Configuration 5模式下,PF5/PF6分别作为SDA/SCL信号,需要外部上拉。只有在SMBUS_CHECK阶段这两个信号上都检测到高电平才能确保进入到CFG_SOC阶段。 如果硬件设计正确,上电后USB4715会停在CFG_SOC阶段,等待从SOC或MCU通过i2c/smbus发来的指令。USB4715的smbus地址是2Dh。具体smbus的读写格式见AN2651 4.0章节(有点长且难懂)。精华如下文。首先介绍其中两个常用操作字:9937h:用于读写寄存器;AA56h:退出CFG_SOC阶段,进入正常的hub启动流程,同时保持smbus有效。以Pickit4工具为例(这个工具可以清晰地展示i2c/smbus的操作)。如果不改变任何配置,直接让hub进入下一流程,命令如下: 04是Pickit工具的要求,表示后面要写入字节的数目;5A是写USB4715;AA 56是特殊的操作字,表示要结束CFG_SOC阶段;00是USB4715要求的结束字符;写完后hub就可以进入正常的枚举过程了。如果要在上面结束CFG_SOC前做些事情,比如读VID,填加的命令如下:第一列是写入要读的寄存器地址 BF80 3000;第二列9937表示是寄存器操作;第三列表示要读16 Byte的数据,但实际USB4715返回的有效数据是从第八个字节开始的(这里找了张其他图片,结果不对,但过程没问题):24 04 02 40 00 06 9B 28 00第四列表示如果改成读8 Byte数据,实际上USB返回的有效数据只有24一个,前面7个都是无用的。当USB4715正常枚举后,可以进行FLEX操作。需要操作如下寄存器(注意这个寄存器要在USB4715枚举成功后再操作):如果想让Port1和Port0进行反转,命令格式如下:
I2CWrite5A,00,00,07,00,01,BF,80,08,08,01
I2CWrite5A,99,37,00
如果想退出反转模式,命令格式如下:
I2CWrite5A,00,00,07,00,01,BF,80,08,08,00
I2CWrite5A,99,37,00
应该是能用的。不能用就请参考下列文档:AN1700 - FlexConnect ApplicationsAN2341 - USB4715 FlexConnect OperationAN2651 - Configuration of Microchip USB47xx/USB49xxUSB4715 Datasheet
smbus是一种什么种类的通讯啊 总线电源VDD:I2C没定义,SMBus为1.8~5V。 是iic数据传输速度快还是usb数据传输速度快啊
SMBus是一种二线制串行总线(还有两根可选信号线SMBSUS#(系统低功耗挂起状态指示)、SMBALERT#(事件提醒)),它大部分基于I2C总线规范
I2C没有最低总线速率要求,SMBus要求最低总线速率不能低于10kHz
SMBus一定要维持10kHz以上的运作频率,主要是为了管理监控
这个协议主要用到一些电池管理芯片上。 笔记本电脑上好像有用这个接口。
页:
[1]