一、fusb302介绍

Fusb302是可编程的USB Type-C控制器,支持识别各种USB 设备和对应的状态;且支持最高100W的PD协议。

Fusb302用CC1/CC2引脚与typeC电源适配器通信,通过PD协议来设置电源适配器的输出电压和电流,从而达到控制充电电压电流,实现快充的目的。

说白了,就是通过 PD协议 控制电源适配器,从VBUS输出不同功率的电源(最高100W)。

二、fusb302引脚功能

引脚

功能

CC1/CC2

主要用来 PD协议通信 或 其他:

1)探测USB连接,区分正反面,区分DFP和UFP的主从关系

2)配置Vbus,有USB Type-C和USB Power Delivery两种模式

3)配置Vconn,当线缆里有芯片的时候,一个cc传输信号,一个cc变成供电Vconn,用来给线缆里的芯片供电(3.3V或5V);

4)如果CC通道连接其他配置,如连接音频配件、DP、PCIE时,CC通道配置是不同的。

VBUS

VBUS为电源适配器提供的用来给电池充电的总线电源,USB PD协议可配置电压和电流,最大100W,如:20V 5A

VCONN

当线缆里有芯片的时候,一个cc传输信号,一个cc变成供电Vconn,用来给线缆里的芯片供电(3.3V或5V)

INIT_N

中断输出,当有事件发生时,用于通知处理器读取I2C寄存器数据。如:插入/拔出typeC,INIT_N都会拉低一下。

SCL、SDA

I2C时钟、数据引脚

介绍:

1、主从

SRC:Source,供电端如:充电器。

SNK:Sink,受电端如:手电筒。

2、DFP、UFP、DRP用途解析

① DFP:Source,下行端口,可以理解为一个Host,DFP作为source给VBUS和vcon供电的,简单理解为一个提供电源的设备,如:电源适配器。

② UFP:Sink,上行端口,可以理解为Device,UFP可以理解为受电端口,DFP为供电端口,UFP从VBUS中取电,并可提供数据。典型设备如:U盘、移动硬盘。

③ DRP:双角色端口,DRP既可以做DFP(Source)又可以做UFP(Sink),也可以在DFP和UFP间动态切换,典型设备是:笔记本电脑、充电宝。

充电宝为UFP(Sink)的应用:电源适配器给充电宝充电。

充电宝为DFP(Source)的应用:充电宝给手机或其他设备充电。

三、fusb302驱动移植及修改方法

与供应商沟通,原厂前期只提供了mcu的代码没提供linux的。因此移植瑞芯微的板子里的fusb302驱动到酷芯平台。

1、将fusb302驱动编译成.ko,并加载

1)设备树dts添加子节点,fusb302挂载 i2c3上

&i2c3 {status = "okay";fusb0:fusb30x@22 {compatible = "fairchild,fusb302";reg = <0x22>;                                    //设备地址int-n-gpios = <&porta0 4 GPIO_ACTIVE_HIGH>;     //GPIO_A0_4status = "okay";};
};

引脚配置如下:

i2c 和 gpio 引脚

2)Makefile

KERN_DIR = /home/dongao/share/kernel/linux-linaro-stable-lsk-v4.9-17.07  #内核路径all:make -C $(KERN_DIR) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- M=`pwd` modules clean:make -C $(KERN_DIR) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- M=`pwd` modules cleanrm -rf modules.orderobj-m    += fusb302.o

3)加载并测试

删除没有定义的 extcon相关函数。

$ make                                //ubuntu下编译生成 fusb302.ko

$ insmod fusb302.ko        //ARM板加载驱动

发现问题:

问题1:probe() 中的 devm_extcon_dev_allocate() 函数会失败。

解决方法:内核配置 extcon。

问题2:酷芯提供的内核的 drivers\extcon\extcon.c 中的 extcon_info[] 没有定义 EXTCON_USB_VBUS_EN

解决方法:按照rk内核的extcon.c文件,extcon_info[]数组添加 EXTCON_USB_VBUS_EN 如下。

struct __extcon_info {unsigned int type;unsigned int id;const char *name;} extcon_info[] = {...
/* 2022-08-22 donga add */[EXTCON_USB_VBUS_EN] = {.type = EXTCON_TYPE_USB,.id = EXTCON_USB_VBUS_EN,.name = "USB_VBUS_EN",},...
}

问题3:正常运行probe()后,插上typec电源适配器后,发现电源适配器不停的发送 Hard Rest。

分析原因:PD协议对实时性要求比较高,fusb302收到适配器适配器的cap自动返回GoodCRC之后,要在15ms内发送request,不然电源适配器会发送HardReset命令。rk平台主频高,每个打印信息也只消耗1ms左右,而酷芯为900M主频,每个打印信息都间隔10ms左右。因此没来得及发送request。

解决方法:见修改驱动源码。

借用一张网图,描述PD协议交互过程:

 2、修改驱动源码

修改方向:发送完GoodCRC后,会触发 INTERRUPTB_GCRCSENT 中断,状态机中尽量减少不需要的分支。

之后,经过多次HardRest,某次及时request进入正常充电。(此时代码不稳定,我想要每次都能立刻request进入正常充电)。继续调试代码。

同时,测试typeC拔出时,应该能产生INIT_N中断。示波器测INIT_N脚,确实有拉低的动作,奇怪为什么没有运行中断处理函数?

原因:驱动代码中断配置成 IRQF_ONESHOT | IRQF_TRIGGER_LOW 模式,中断处理函数中关中断,工作队列再开中断。之后就无法触发了。(如果不关开中断,可以一直触发)。这个问题找厂家协助处理中。。。

测试发现下降沿触发不会出现这样的问题,因此对代码作出修改,改为 IRQF_TRIGGER_FALLING 模式加载驱动时,还需判断 type-C插入状态。

如下:

3、验证fusb302驱动,结合bq25720 充电管理IC

fusb302只是控制typeC电源适配器的VBUS脚输入的电压和电流。充电还需要充电管理IC,这里为 bq25720(驱动方法看相关文档)。

如:项目中fusb302控制电压适配器VBUS输出为 9V 3A,再通过 bq25720 限制到 8V 2A(实际看功率,要比VBUS的功率小),最终给电池充电。

硬件环境:

PD快充流程:

1)fusb302 原理图

2)加载驱动

$ insmod fusb302.ko                 //ARM板加载fusb302.ko驱动

$ insmod bq25720_charger.ko //ARM板加载bq25720_charger.ko驱动

3)逻辑分析仪采集CC1/2 PD协议通信过程

Sink发送Soft_Rest信号

Sink请求

至此,每次插上type-c充电时,电流计能检测到 9V 2.2A左右。与我代码里设置的值一致。

附上源码:https://download.csdn.net/download/hinewcc/87589264

PD快充 - fusb302驱动调试笔记相关推荐

  1. 苹果7支持快充吗_苹果神操作:2020款新iPad配20W充电器 但不支持PD快充-苹果,iPad ——快科技(驱动之家旗下媒体)-...

    相较于iPhone来说,今年新iPad要厚道一些,至少标配了20W充电头,但是..... 充电头网对2020款iPad进行了测试(也被称为iPad 8),主要是它标配的20W充电头(附赠了USB-C ...

  2. xb8886a规格书_拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD

    拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD 2019-12-27 20:21:28 1点赞 6收藏 3评论 Baseus倍思一直致力于充电配件的研发与生产 ...

  3. 里的type_拥有Type-C接口等于拥有PD快充?当然不是!

    说起手机PD快充,大家或多或少都体验过,现在很多Type-C接口手机的充电配置几乎都纳入了USB-PD快充协议.那么,大知道PD快充是什么?与Type-C接口有什么关系吧?我们一起来看看! 1.什么是 ...

  4. 苹果xsmax是什么接口_为什么苹果PD快充线头是银色而非金黄色?原来那根本就不是镀的银...

    苹果开放第三方授权后,目前市面上已有不少苹果MFi认证的PD快充线,1小时就能充满iPhone X.苹果PD数据线,即USB-C to Lighting数据线,是苹果自家定义的一套数据线规范,一端为T ...

  5. 减少USB 1.1 2.0 端口驱动程序延时_旅行伴侣 紫米65W单USB-C口PD快充头 双十一不可错过数码单品好物...

    作为即将来临的一年一度购物狂欢节-双十一想必大家再熟悉不过,那么如何买到让自己称心如意.实惠好用的产品一度成为难倒购物狂人的一大壁垒.特别是在数码圈,各色各样琳琅满目的数码产品更是让购买者眼花缭乱,, ...

  6. 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片

    PD40W45W50W55W65W100W移动电源大功率芯片 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片 PD40W45W50W65W大功率充电芯片 宽电压输入3.6 V ...

  7. LDR6020 双USB-Type-C适配器方案 适用于苹果手机(仅需一颗芯片 完成PD快充)

    6月7日,欧盟公布了"在欧盟境内统一使用USB Type-C接口用于移动设备充电"的法规.在同一天,苹果公司发布了自己的35W双USB Type-C口充电器.可以看到,多USB T ...

  8. 6-8.4V自动升降压5V 9V 12V PD快充解决方案 TYPE-C快充

    常需要将其6-8.4V的低电压升至可供使用的5V,9V,12V,甚至更高的电压.再如双节锂电池6.0V-8.4V电压升压到9V,12V,15V,20V,24V等电压给手机进行快速充电,也就是当前的PD ...

  9. 5-36V输入自动升降压PD快充方案图纸30W低成本芯片

    在许多应用场合,都需要将低电压升至适合用电设备使用的较高电压.如单节和双节锂电池供电电路,常需要将其2.8-4.2V的低电压升至可供使用的5V,9V,12V,甚至更高的电压.再如双节锂电池6.0V-8 ...

最新文章

  1. MAVEN项目线上发布出现的问题之一
  2. linux uniq命令_如何在Linux上使用uniq命令
  3. NO.106 需求的状态、研发阶段及注意事项。
  4. 基于云存储网关的Veeam备份归档上云方案
  5. 生产环境的分布式任务调度框架如何选择?quartz、xxl-job、Elastic-Job、Saturn
  6. MATLAB 画图 x轴换成 字符串
  7. mongodb 分组聚合_MongoDB干货总结
  8. c语言读一字节程序,C语言读写二进制文件
  9. windows部署novnc浏览器远程控制windows
  10. (JavaScript案例)可拖动的模态框
  11. 赠人玫瑰,手有余香, 下面请听仙居义工专题报道
  12. kali-top10-Nmap
  13. 手机视频监控解决方案(客户端)
  14. 大天使黎明服务器维护,37大天使之剑3月5日部分区服维护公告
  15. 基带信号与频带信号的基础认识
  16. Excel全部或部分字体加粗方法
  17. 看EyeEm如何在产品开发中整合、运用深度学习模型
  18. 桌面计算机硬盘打不开怎么办,电脑硬盘打不开提示格式化怎么办
  19. NodeJS 5分钟 连接MySQL 增删改查
  20. PG虚拟文件描述符(VFD)机制——封装的文件接口:postgresql-8.4.1/src/backend/storage/file/fd.c

热门文章

  1. Thread类及常见方法
  2. vue element-ui 在el-tabs组件 最右侧添加按钮
  3. 完成这四步,还有谁说运营是“打杂”的?
  4. 计算机平面设计考试试题及答案,计算机平面设计试题(带答案)
  5. 4个数字计算24点java算法(附源码)
  6. opython3l下载_python3下载远程代码并执行
  7. 盈谷网络发布医学影像平台“医真云”,重新定义人工智能+大数据时代下的PACS系统
  8. 2021下半年Shake Shack将进驻杭州
  9. text-algin:center使文字居中在某些浏览器无效的情况
  10. 3ds Max 2019 Essential Training 3ds Max 2019基本培训 Lynda课程中文字幕