找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11381|回复: 66
收起左侧

2款18W快充芯片SW6124和IP5328P单片机程序PCB电路图详细资料

  [复制链接]
没有你 发表于 2019-7-25 13:52 | 显示全部楼层 |阅读模式
资料包括芯片手册、IIC寄存器控制手册、IIC通信例程、PCB demo板PCB文件。除了可以实现基本功能,还可以可以利用单片机模拟IIC通信扩展其他功能。
0.png

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.png 0.png

单片机源程序如下:
  1. #include "CSU32P10.h"
  2. //#include "define_data.h"
  3. #include "define_function.h"
  4. #include "my_define.h"

  5. #define SDA PT3_1                           //定义SDA所对应的GPIO接口编号P1.4  
  6. #define SCL PT3_0                           //定义SCL所对应的GPIO接口编号P1.5
  7. #define SDAEN PT3EN_1                           //定义SDA所对应的GPIO接口编号P1.4  
  8. #define SCLEN PT3EN_0                           //定义SCL所对应的GPIO接口编号P1.5
  9. #define I2C_ADDR 0x3c
  10. #define somenop asm("nop");asm("nop");asm("nop");asm("nop");
  11. //#define I2C_ADDR 0x3c
  12. unsigned char buf0;
  13. unsigned char buf1;
  14. unsigned char i2c_step;


  15. //短delay

  16. /* I2C起始条件 */  
  17. void i2c_start()  
  18. {  
  19.         //初始化GPIO口
  20.         SDAEN = 1;                                //设置SDA方向为输出
  21.         SCLEN = 1;                                //设置SCL方向为输出
  22.         SDA = 1;                //设置SDA为高电平
  23.         asm("nop");
  24.         SCL = 1;                //设置SCL为高电平   
  25.         somenop
  26.         somenop
  27.         SDA = 0;                //SCL为高电平时,SDA由高变低  
  28.         somenop
  29.         somenop
  30.         somenop
  31.         somenop
  32.         somenop
  33.         somenop
  34.         SCL = 0;
  35. }  
  36. /* I2C终止条件 */  
  37. void i2c_stop()  
  38. {  
  39.         somenop
  40.         SDA = 0;       
  41.         SDAEN = 1;   
  42.         somenop
  43.         SCL = 1;
  44.         somenop
  45.         somenop
  46.         somenop
  47.         somenop
  48.         somenop
  49.         somenop
  50.         SDA = 1;            //SCL高电平时,SDA由低变高
  51.         somenop       
  52.         SDAEN = 0;
  53. //        SCL = 0;
  54. }  
  55. /*   
  56. I2C读取ACK信号(写数据时使用)  
  57. 返回值 :0表示ACK信号有效;非0表示ACK信号无效  
  58. */  
  59. void i2c_read_ack()  
  60. {   
  61.         SCL = 0;               // SCL变低
  62.         SDAEN = 0;                                 //设置SDA方向为输入
  63.         somenop       
  64.         SCL = 1;              // SCL变高  
  65.         somenop
  66.         if(SDA)
  67.         {
  68.                 i2c_step = 0xff;
  69.                 return;
  70.         }
  71.         SCL = 0;
  72.         asm("nop");
  73.         asm("nop");
  74.         asm("nop");
  75.         asm("nop");
  76. }  
  77. /* I2C发出ACK信号(读数据时使用) */  
  78. void i2c_send_ack()  
  79. {
  80.         SCL = 0;              // SCL变低
  81.         somenop
  82.         SDA = 1;              //发出ACK信号
  83.         SDAEN = 1;              //设置SDA方向为输出      
  84.         asm("nop");
  85.         asm("nop");
  86.         asm("nop");       
  87.         SCL = 1;             // SCL变高  
  88.         somenop
  89.         SCL = 0;
  90. //        SDAEN = 1;
  91.         asm("nop");
  92.         asm("nop");
  93. }  
  94. /* I2C字节写 */

  95. void i2c_resume()
  96. {
  97.         GIE = 0;
  98.         delay_1s();
  99.         delay_1s();
  100.         i2c_read_ack();
  101.         i2c_read_ack();
  102.         i2c_read_ack();
  103.         i2c_read_ack();
  104.         i2c_read_ack();
  105.         i2c_read_ack();
  106.         i2c_read_ack();
  107.         i2c_read_ack();
  108.         GIE = 1;
  109. }

  110. void i2c_write_byte(unsigned char b)  
  111. {   
  112.         SDAEN = 1;    //设置SDA方向为输出  
  113.         SCL = 0;
  114.         for (i2c_step = 8; i2c_step > 0; i2c_step --)
  115.         {  
  116.                 SCL = 0;             // SCL变低
  117.                 asm("nop");
  118.                 if( b & (1 << (i2c_step - 1)))
  119.                         SDA = 1;
  120.                 else
  121.                         SDA = 0;
  122.                 asm("nop");
  123.                 SCL = 1;             // SCL变高  
  124.                 somenop
  125.                 SCL = 0;
  126.         }  
  127.         i2c_read_ack();
  128. }

  129. /* I2C字节读 */  
  130. void i2c_read_byte()  
  131. {   
  132.         buf1 = 0;
  133.         SDAEN = 0;                                //设置SDA方向为输入
  134.         for(i2c_step = 8; i2c_step > 0; i2c_step --)
  135.         {  
  136.                 SCL = 0;         // SCL变低  
  137.                 asm("nop");
  138.                 asm("nop");
  139.                 SCL = 1;
  140.                 //i2c_result = (i2c_result << 1) | SDA;
  141.                 buf1 = (buf1 << 1) | SDA;
  142.                                                         // SCL变高  
  143. //                asm("nop");
  144. //                asm("nop");
  145.                 SCL = 0;
  146.         }
  147.         i2c_send_ack();                                                //向目标设备发送ACK信号
  148. }  
  149. /*  
  150. I2C读操作  
  151. addr:目标设备地址  
  152. buf:读缓冲区  
  153. len:读入字节的长度  
  154. */  
  155. void i2c_read()  
  156. {  
  157.         i2c_start();                                                        //起始条件,开始数据通信  
  158.                                                                         //发送地址和数据读写方向  
  159.         i2c_write_byte(I2C_ADDR<<1);        //I2C ADDR

  160.         asm("nop");
  161.         if(i2c_step == 0xff)
  162.         {
  163.                 i2c_resume();
  164.                 return;
  165.         }       

  166.         i2c_write_byte(buf0);                        //Reg ADDR

  167.         asm("nop");
  168.         if(i2c_step == 0xff)
  169.         {
  170.                 i2c_resume();
  171.                 return;
  172.         }       
  173.         //asm("nop");
  174.         i2c_start();//restart

  175.         i2c_write_byte((I2C_ADDR<<1) +1);        //Reg ADDR

  176.         asm("nop");
  177.         if(i2c_step == 0xff)
  178.         {
  179.                 i2c_resume();
  180.                 return;
  181.         }
  182.         //读入数据  

  183.         i2c_read_byte();

  184.         i2c_stop();
  185.         //终止条件,结束数据通信  
  186. }  
  187. /*  
  188. I2C写操作  
  189. addr:目标设备地址  
  190. buf:写缓冲区  
  191. len:写入字节的长度  
  192. */  
  193. void i2c_write()  
  194. {  
  195.         i2c_start();                                                        //起始条件,开始数据通信  
  196.         //发送地址和数据读写方向

  197.         i2c_write_byte(I2C_ADDR<<1);

  198.         asm("nop");
  199.         if(i2c_step == 0xff)
  200.         {
  201.                 i2c_resume();
  202.                 return;
  203.         }       
  204.        
  205.         //写入数据

  206.         i2c_write_byte(buf0);

  207.         asm("nop");
  208.         if(i2c_step == 0xff)
  209.         {
  210.                 i2c_resume();
  211.                 return;
  212.         }

  213.         i2c_write_byte(buf1);

  214.         asm("nop");
  215.         if(i2c_step == 0xff)
  216.         {
  217.                 i2c_resume();
  218.                 return;
  219.         }
  220.         i2c_stop();                     //终止条件,结束数据通信  
  221. }
复制代码

所有资料51hei提供下载:
SW6124.rar (8.1 MB, 下载次数: 371)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

helouxuan 发表于 2020-11-24 09:48 | 显示全部楼层
首先很感谢楼主的分享啊,可是我读电压一直不成功,都是0xff
回复

使用道具 举报

Coolin... 发表于 2020-10-9 22:39 | 显示全部楼层
5328P看不到哦
回复

使用道具 举报

hyt19920125 发表于 2020-9-24 15:18 来自手机 | 显示全部楼层
支持下,不知道有没有寄存器说明文件
回复

使用道具 举报

上知工作室 发表于 2020-6-11 16:37 | 显示全部楼层

感谢分享
回复

使用道具 举报

liudun10000 发表于 2020-6-8 13:53 | 显示全部楼层
很好的资料
回复

使用道具 举报

cawboy 发表于 2020-5-11 10:54 | 显示全部楼层
感谢楼主分享,想向您请教下,使用IIC读取电量的时候读取的寄存器地址是什么呢?我按照手册读取出来的数值总是0x00.
回复

使用道具 举报

akenonline 发表于 2020-5-9 09:40 | 显示全部楼层

感谢楼主分享
回复

使用道具 举报

flying1104 发表于 2020-5-7 08:43 | 显示全部楼层
谢谢LZ分享,打算用IP5328p玩玩,跟着LZ走,少走点弯路
回复

使用道具 举报

 楼主| 没有你 发表于 2020-4-28 21:32 | 显示全部楼层
Tony22 发表于 2020-4-28 13:18
楼主,sw6124的iic通讯,上拉电阻接到多少V。 我之前用ip5318踩过一个坑,iic通讯时,必须要接ip5318的LDO ...

ip5318的数据手册有标识IIC需要上拉接到VREG的,这是比较严谨的做法。sw6124的数据手册虽然没有这个标注,但是为了能够正常IIC通信,建议上拉接到18引脚的VCC。
回复

使用道具 举报

Tony22 发表于 2020-4-28 13:18 | 显示全部楼层
楼主,sw6124的iic通讯,上拉电阻接到多少V。 我之前用ip5318踩过一个坑,iic通讯时,必须要接ip5318的LDO的电压VREG。我当时接的是系统的3.3V,怎么都通讯不了。后来邮件问厂家,才说的。手册里没写。

回复

使用道具 举报

Tony22 发表于 2020-4-28 12:31 | 显示全部楼层
楼主,sw6124如果用iic的话,需要上拉电阻吗? 上拉电阻接到多少V? 之前用ip5318. iic通讯,上拉的电阻必须接VREG才能读到数据。
回复

使用道具 举报

kk123956 发表于 2020-4-19 12:22 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

pt9321 发表于 2020-4-7 14:39 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

初雪 发表于 2020-4-4 00:56 | 显示全部楼层
有完整程序吗?
回复

使用道具 举报

cxbengxiong 发表于 2020-3-27 12:55 | 显示全部楼层
IP5328如何改电池
回复

使用道具 举报

gsm85215 发表于 2020-3-20 13:10 | 显示全部楼层
谢谢分享,正要找这个资料
回复

使用道具 举报

gsm85215 发表于 2020-3-20 13:09 | 显示全部楼层
多谢  下载看看 参考一下
回复

使用道具 举报

videre 发表于 2020-3-10 14:30 | 显示全部楼层
谢谢分享,正要找这个资料
回复

使用道具 举报

courage_001 发表于 2020-3-7 09:19 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ldq720 发表于 2020-3-5 23:24 | 显示全部楼层
感谢楼主分享,有空做个
回复

使用道具 举报

synapse 发表于 2020-2-24 08:53 来自手机 | 显示全部楼层
妙啊!终于有IP5328的寄存器资料了,哪天整个移动电源
回复

使用道具 举报

burakgner 发表于 2020-2-16 04:23 | 显示全部楼层
没有define_data.h
define_function.h和
my_define.h我如何获得
回复

使用道具 举报

burakgner 发表于 2020-2-4 19:11 | 显示全部楼层
我尝试在pad 9.5中使用ip5328 pcb文件,但在警告只读后无法打开
回复

使用道具 举报

burakgner 发表于 2020-2-4 08:04 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

burakgner 发表于 2020-2-4 07:51 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

burakgner 发表于 2020-2-4 07:50 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

mdmbct 发表于 2020-1-31 22:37 | 显示全部楼层
非常厉害,66666
回复

使用道具 举报

shznwu 发表于 2020-1-21 07:14 | 显示全部楼层
感谢楼主分享,有空做个
回复

使用道具 举报

zhyzsn 发表于 2020-1-4 17:22 | 显示全部楼层
楼主优秀!支持楼主!
回复

使用道具 举报

 楼主| 没有你 发表于 2019-12-28 11:06 | 显示全部楼层
1743536048 发表于 2019-12-27 15:00
感谢楼主分享,问下楼主,用Altium designer打不开5328的那个PCB图与原理图么,我打开提示无法识别文件类型

5328那个用pads软件才能打开
回复

使用道具 举报

1743536048 发表于 2019-12-27 15:00 | 显示全部楼层
感谢楼主分享,问下楼主,用Altium designer打不开5328的那个PCB图与原理图么,我打开提示无法识别文件类型
回复

使用道具 举报

 楼主| 没有你 发表于 2019-12-27 11:51 | 显示全部楼层
qwb007 发表于 2019-12-26 18:27
楼主问下 :如果我的产品只有一个接口 type_C 口,是不是Vout1那部分电路还要预留。就是说 对外放电的时候  ...

如果只有一个Type-C口,那只连接Type-C口那部分的电路即可。其他USB-A和microUSB可以不连接。
回复

使用道具 举报

qwb007 发表于 2019-12-26 18:27 | 显示全部楼层
楼主问下 :如果我的产品只有一个接口 type_C 口,是不是Vout1那部分电路还要预留。就是说 对外放电的时候 TYPE_C 的电源来源是VOUT1还是 VSYS?被规格书中那句:如果只留一个对外放电的口 保留Vout1 给弄糊涂了
回复

使用道具 举报

mobicity 发表于 2019-12-1 15:38 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

雨落听风 发表于 2019-11-28 19:36 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

lry20190312 发表于 2019-11-26 14:11 | 显示全部楼层
谢谢分享
回复

使用道具 举报

helter 发表于 2019-11-24 01:50 | 显示全部楼层
Hey, I am a non-chinese user and I was looking up on the internet to understand how to use the i2c on the chip. But I can't download the files because I don't know chinese. Can someone please help me and send me the files somehow?
回复

使用道具 举报

zhuhanliang 发表于 2019-11-23 11:34 | 显示全部楼层
原理图有人能打开吗
回复

使用道具 举报

m182892 发表于 2019-11-14 20:57 | 显示全部楼层
能不能分享完整代码。
回复

使用道具 举报

Bingo35330 发表于 2019-11-14 19:45 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表