PD快充 - fusb302驱动调试笔记
一、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驱动调试笔记相关推荐
- 苹果7支持快充吗_苹果神操作:2020款新iPad配20W充电器 但不支持PD快充-苹果,iPad ——快科技(驱动之家旗下媒体)-...
相较于iPhone来说,今年新iPad要厚道一些,至少标配了20W充电头,但是..... 充电头网对2020款iPad进行了测试(也被称为iPad 8),主要是它标配的20W充电头(附赠了USB-C ...
- xb8886a规格书_拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD
拆解报告:Baseus倍思Bipow 10000mAh USB PD快充移动电源N1PD 2019-12-27 20:21:28 1点赞 6收藏 3评论 Baseus倍思一直致力于充电配件的研发与生产 ...
- 里的type_拥有Type-C接口等于拥有PD快充?当然不是!
说起手机PD快充,大家或多或少都体验过,现在很多Type-C接口手机的充电配置几乎都纳入了USB-PD快充协议.那么,大知道PD快充是什么?与Type-C接口有什么关系吧?我们一起来看看! 1.什么是 ...
- 苹果xsmax是什么接口_为什么苹果PD快充线头是银色而非金黄色?原来那根本就不是镀的银...
苹果开放第三方授权后,目前市面上已有不少苹果MFi认证的PD快充线,1小时就能充满iPhone X.苹果PD数据线,即USB-C to Lighting数据线,是苹果自家定义的一套数据线规范,一端为T ...
- 减少USB 1.1 2.0 端口驱动程序延时_旅行伴侣 紫米65W单USB-C口PD快充头 双十一不可错过数码单品好物...
作为即将来临的一年一度购物狂欢节-双十一想必大家再熟悉不过,那么如何买到让自己称心如意.实惠好用的产品一度成为难倒购物狂人的一大壁垒.特别是在数码圈,各色各样琳琅满目的数码产品更是让购买者眼花缭乱,, ...
- 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片
PD40W45W50W55W65W100W移动电源大功率芯片 40W-100W系列PD快充IC方案,AH6680,高效简洁的升降压芯片 PD40W45W50W65W大功率充电芯片 宽电压输入3.6 V ...
- LDR6020 双USB-Type-C适配器方案 适用于苹果手机(仅需一颗芯片 完成PD快充)
6月7日,欧盟公布了"在欧盟境内统一使用USB Type-C接口用于移动设备充电"的法规.在同一天,苹果公司发布了自己的35W双USB Type-C口充电器.可以看到,多USB T ...
- 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 ...
- 5-36V输入自动升降压PD快充方案图纸30W低成本芯片
在许多应用场合,都需要将低电压升至适合用电设备使用的较高电压.如单节和双节锂电池供电电路,常需要将其2.8-4.2V的低电压升至可供使用的5V,9V,12V,甚至更高的电压.再如双节锂电池6.0V-8 ...
最新文章
- MAVEN项目线上发布出现的问题之一
- linux uniq命令_如何在Linux上使用uniq命令
- NO.106 需求的状态、研发阶段及注意事项。
- 基于云存储网关的Veeam备份归档上云方案
- 生产环境的分布式任务调度框架如何选择?quartz、xxl-job、Elastic-Job、Saturn
- MATLAB 画图 x轴换成 字符串
- mongodb 分组聚合_MongoDB干货总结
- c语言读一字节程序,C语言读写二进制文件
- windows部署novnc浏览器远程控制windows
- (JavaScript案例)可拖动的模态框
- 赠人玫瑰,手有余香, 下面请听仙居义工专题报道
- kali-top10-Nmap
- 手机视频监控解决方案(客户端)
- 大天使黎明服务器维护,37大天使之剑3月5日部分区服维护公告
- 基带信号与频带信号的基础认识
- Excel全部或部分字体加粗方法
- 看EyeEm如何在产品开发中整合、运用深度学习模型
- 桌面计算机硬盘打不开怎么办,电脑硬盘打不开提示格式化怎么办
- NodeJS 5分钟 连接MySQL 增删改查
- PG虚拟文件描述符(VFD)机制——封装的文件接口:postgresql-8.4.1/src/backend/storage/file/fd.c
热门文章
- Thread类及常见方法
- vue element-ui 在el-tabs组件 最右侧添加按钮
- 完成这四步,还有谁说运营是“打杂”的?
- 计算机平面设计考试试题及答案,计算机平面设计试题(带答案)
- 4个数字计算24点java算法(附源码)
- opython3l下载_python3下载远程代码并执行
- 盈谷网络发布医学影像平台“医真云”,重新定义人工智能+大数据时代下的PACS系统
- 2021下半年Shake Shack将进驻杭州
- text-algin:center使文字居中在某些浏览器无效的情况
- 3ds Max 2019 Essential Training 3ds Max 2019基本培训 Lynda课程中文字幕