论坛首页 > 创客天地 > 开发板、模块及工具 > 制作一款基于USB串口的I2C在线调...
查看:3537  |  回复:18
制作一款基于USB串口的I2C在线调试神器
那林
8
主题
38
回复
发表于Tue Feb 21 16:50:16 CST 2017   |  只看该作者 1# 电梯直达

制作一款基于USB串口的I2C在线调试神器

                     

1、作品简介

I2C总线,是NXP半导体(原PHILIPS)于20多年前发明的一种简单的双向二线制串行通信总线,也叫I2CIIC(Inter-Integrated Circuit,内部集成电路总线)

I2C总线是各种总线中使用信号线最少,电路简洁,并具有自动寻址、多主机时钟同步和仲裁等功能的总线。因此,基于I2C接口的各类芯片器件,

在实际市场中得到广泛应用。这些芯片例如:

 

24CXX系列的EEPROM,如24LC0824C0124C128等等

I2C总线8位并行IO口扩展芯片PCF8574/JLC1562

I2C接口时钟芯片DS1307/PCF8563/SD2000D/M41T80/ME901/ISL1208/

I2C ADC芯片ADS1110 (16bitADC)/ADS1112(16bitADC)/

I2C DAC芯片DAC5574(8bitDAC)/DAC6573(10bitDAC)/DAC8571(16bitDAC)/

I2C接口的温度传感器SHT30/SHT31/TMP101/TMP275/DS1621/MAX6625

 

为了评估这些芯片,通常的做法是使用一个单片机或ARM,自行编写I2C驱动代码,然后对这些器件进行读写操作,并把数据结果上传到PC机的方式进行展现。

然而,这样的做法较麻烦,因为单片机需要反复的烧录和调试,不是很直观和方便。为此,本人使用来自英国著名公司FTDI的高性能USB转串口芯片FT234XD芯片

+NXP公司的UARTI2C总线协议管理器芯片C18IM700制作了这款可在线实时读写I2C总线的调试利器、神器这款利器具有操作简单(会打字就行)、显示直观

地特点,大大提高了测试和评估各类I2C器件的工作效率。下面,请允许本人给大家介绍这款利器的设计过程和使用方法。

 

2、作品亮点

实现通过UART协议读写I2C协议的从器件或者传感器,不用写繁琐的I2C程序咯!

I2C的底层驱动由原发明人--NXP公司设计和提供,确保了I2C驱动的最佳时序!

采用业界公认的USB接口专家--FTDI公司出品的FT234XD作为USB转串口单元。

可高速通信,C18IM700UART支持到460KI2C支持到400K

接口信号:SCLSDAGND+5V+3.3V

本方案验证板采用USB BUS总线供电,评估I2C器件,无需额外再提供电源。

C18IM700的所用IO均引出,包括8GPIO端口和2个输入按键。

本方案验证板一分为二,即可单独用作USB转串口模块,也可以单独用在I2C读写模块。

2.3-3.6V供电,支持5V IO口的I2C电气接口。


3、系统构架图

系统解说: 本系统有二大部分组成,分别是:基于FT234XD的高性能USB转串口模块部分和基于NXPSC18IM700 I2C MASTER总线驱动模块部分。

 

4、原理图


原理图分为多个部分,下面逐个介绍:

第一部分: USB转串口模块部分

 

备注说明: 上图使用的是FTDI官方推荐的应用电路,其中U1FT234XD 负责实现USB转串口的芯片,C9C10R10R11组成了USB总线的信号匹配和防D+D-短路(过流)的电路,

FT234XD内置USB上拉电阻,所以无需额外在增加。U3USB总线的抗静电保护器件,采用的是美国力特LittelFuse公司出品的SP0503BAHTG, 可以根据需要焊接或不焊接。而R1

R2Q1C5组成用来一个软启动、VBUS(5V)电源输出的电路,以减轻对外部负载的电流冲击,进而影响到USB通信芯片 FT234XD的稳定性和可靠性。如果不需要这个软启动电路,

可以不焊接这些器件,同时用一个零欧姆的电阻跳过该功能。类似地,R18C14是接到USB连接器的外壳,用于增加外壳的ESD防护能力,可根据需要焊接或不焊接。

 

第二部分:系统的供电电源部分


 

备注说明: 如上图所示,本方案验证板模块,可对外提供+5V+3.3V电源,其中 +3.3V电源由LDO芯片采用台湾Holtek 公司的 HT7233SOT-89封装,最大可提供300mA的驱动

能力,这个基本能覆盖绝大部分的I2C器件的评估需求。

 

第三部分: I2C总线驱动模块部分

 

备注说明: 如上图所示,I2C总控制器采用NXPSC18IM700这个芯片,它的RX TX引脚分别交叉接到USB转串口芯片的TXDRXD端口。这样以来,上位机软件(如串口助手之类的

就可以直接控制SC18IM700进行I2C总线的读写操作了。此外,图中的S1轻触开关是用来复位芯片的,如果I2C操作出现异常或者觉得有必要,用户可以按下此开关,进行I2C总线的初始化。

S2是用来唤醒芯片的,当SC18IM700被设置进入SLEEP状态时。


5、材料清单(BOM列表)

以下是这个电子制作的BOM列表,器件全部采购来自立创商城http://www.szlcsc.com,PCB板的制造在深圳嘉立创完成。除了插件的器件外,SMT也是嘉立创完成滴。


6、软件部分的描述

软件部分,这个应用方案模块,不需要编写任何代码,纯硬件电路实现,正常焊接即可使用。

 

7PCB实物图





8、调试过程和应用实例

第一步: 准备工作

根据上面的BOM表焊接好PCBA后,如果焊接正常的话,通过MicroUSB数据线将它插入到PC机的USB串口后,接着安装FT234XD的串口驱动程序,随后即可进入工作状态。


第二步: 测试PCBA是否焊接正常?

打开USB串口软件(本人用的是SSCOM3.3串口助手),按这个常见的波特率进行设置:(9600,N,8,1, 这个波特率也是SC18IM700的默认波特率,如需修改后面还可以通过相应寄存器

进行设置)。接着,将短接帽JP1JP2接入,即把USB转串口芯片的TX&RXSC18IM700的串口线TX&RX连接起来;随后,用手去按下S1复位一下SC18IM700芯片。此时,如果在串口助手

看到有字符“OK“显示,表示PCBA功能基本正常。

 

第三步:进一步测试TXRX的连线是否正常

上一步,只是初步测试了串口RX的接收情况,没有测试TX功能。测试TX功能,可以通过读写SC18IM700内部寄存器的方式进行判断,这些寄存器的地址和复位默认值如下:

测试方法,比如我们要读写SC18IM70000 01 号寄存器的上电复位默认值,只需在串口助手软件上,以HEX发送的方式,输入“52 00 01 50”即可,如果硬件和连接一切正常的话,

串口助手的接收端(HEX格式接收)会显示“F0 02 “

 

第四步:应用实例1 点亮或熄灭SC18IM700GPIO端口上外接的一个LED指示灯。

首先,需要给大家说明的是,所有对I2C 总线控制器 SC18IM700的读写和控制,即在线调试,都是通过USB转串口跟芯片SC18IM700之间的交互完成的。这些交互指令,如下:

 

SC18IM700本身带有8GPIO接口,每个GPIO可以设置成四种模式(输入或输出),假设一个LED指示灯接到了GPIO.0 这个PIN上,为了点亮或熄灭这个LED 指示灯,我们首先可

直接在串口助手上,发出"4F00 50"或者“4F 01 50" 即可。

第四步:应用实例2:读写EEPROM 芯片24C02

为了,读写EEPROM,我们需要根据SC18IM700的以下这个指令格式,进行操作。

具体地,

为了读取16个默认地址的数据,我们只需要在串口助手里输入和发送“53 XX 10 50”。

其中,XX24C02I2C地址(最低字节要为1,表示读),10是表明要读16个数据。

 


为了写入默认地址的8个字节数据,我们只需要在串口助手里输入和发送“53 YY 08 D1 D2 D3 D4 D5 D6 D7 D8 50”。其中,YY24C02I2C地址(最低字节要为0,表示写),

08是表明要写入8个数据。

 

因篇幅所限,SC18IM的其它功能在此就不在展现,比如为了设置I2C的读写时钟,我们可通过设置SC18IM700内部0708号的寄存器值,来改变。也可以通过修改SC18IM700内部

09号的寄存器值,来设置或禁止I2C总线的读写信号的时间限定值。通过读取SC18IM700内部0A号的寄存器值,来获取I2C总线执行的结果,通过设置0001号寄存器进行串口波特

率速度的调整等等。


9、总结

只使用两个芯片SC18IM700SC18IM700,我们便制作出了这款可在线实时读写I2C总线的调试利器、神器!使用它,我们只需要在串口助手软件上,直接根据I2C的读写格式,

发出相关的操作命令即可对I2C器件进行读写操作,而无需编写任何头疼的I2C代码,也不用反复烧录单片机的调试代码,而是重心放在如何应用I2C器件方面,大大提高了测试

和评估各类I2C器件的工作效率!

此作品以方案验证板的形式出现,并得到了立创商城的赞助,在此表示非常感谢!顺此,授权立创商城对本作品进行宣传和开源!


本内容系原创,首发于《立创快报》第4期,目前仅授权【立创商城】公众号(微信号:szlcsc)及其相关平台转载。

其它任何媒体或个人,未经本作者许可、不得引用。

 

该帖子已被立创商城赵工于Mon Mar 06 10:38:28 CST 2017编辑过
厚积薄发,再创辉煌!
回复 收藏
  举报
立创商城赵...
【官方工作人员】
112
主题
1209
回复
发表于Tue Feb 21 16:58:12 CST 2017   |  只看该作者 2#

再次感谢楼主的分享! 

本作品之前已经在《立创快报》第4期的电子制作栏目中发表!


对应的,楼主所设计的PCB方案验证板,PCB空板的商品型号是:C94982。 

近期我们商城将小批量制作一批空板,然后免费赠送给我们商城的会员、客户。有需要的朋友,敬请留意和期待!




《立创快报》总编辑、立创电子公共实验室建设者,企业QQ:2355740879
D
51
主题
385
回复
发表于Tue Feb 21 16:59:26 CST 2017   |  只看该作者 3#

期待验证板早点出来。楼主,文中有部分笔误,可再核查一遍。

3M口罩滤棉5N11、2091、2097在商城也有售了,价格实惠,搜索关键词“滤棉”; 合泰新出点阵LED驱动HT16D35A
那林
8
主题
38
回复
发表于Tue Feb 21 17:09:15 CST 2017   |  只看该作者 4#
D 发表于 Tue Feb 21 16:59:26 CST 2017  3# 期待验证板早点出来。楼主,文中有部分笔误,可再核查一遍。
语文经常不及格,还望大家请提出,方便交流或修改。
厚积薄发,再创辉煌!
let
7
主题
358
回复
发表于Tue Feb 21 22:52:07 CST 2017   |  只看该作者 5#

为楼主这种无私分享精神给个LIKE.

又设计,又画图,又写文章,看到的人都有所得益。

对我们这种电子爱好者来说,是要收藏的文章。


SMT从业员,需要可联系。
那林
8
主题
38
回复
发表于Wed Feb 22 09:53:06 CST 2017   |  只看该作者 6#
let 发表于 Tue Feb 21 22:52:07 CST 2017  5# 为楼主这种无私分享精神给个LIKE. 又设计,又画图,又写文章,...

谢谢!

有个GPIO的指令格式图,插入地方错了,但现在改不了主楼了,大家理解一下,凑合者先看看吧。

厚积薄发,再创辉煌!
哈哈一笑
2
主题
11
回复
发表于Thu Feb 23 16:29:47 CST 2017   |  只看该作者 7#
这个必须顶一下
YeeRay
4
主题
161
回复
发表于Thu Feb 23 17:34:41 CST 2017   |  只看该作者 8#
这个不错啊,立创有卖吗?
立创商城赵...
【官方工作人员】
112
主题
1209
回复
发表于Thu Feb 23 18:21:05 CST 2017   |  只看该作者 9#
YeeRay 发表于 Thu Feb 23 17:34:41 CST 2017  8# 这个不错啊,立创有卖吗?

芯片都有卖! PCB空板,还可以免费拿! 呵呵


PCB空板商品直通车:

http://www.szlcsc.com/product/details_96182.html
《立创快报》总编辑、立创电子公共实验室建设者,企业QQ:2355740879
arm8686
2
主题
33
回复
发表于Fri Mar 24 19:20:30 CST 2017   |  只看该作者 10#

这种硬件解决方案,相比新唐的牛桥,要便捷一些。

芯片现阶段还有点小贵。

立创商城赵...
【官方工作人员】
112
主题
1209
回复
发表于Wed Mar 29 11:45:54 CST 2017   |  只看该作者 11#
arm8686 发表于 Fri Mar 24 19:20:30 CST 2017  10# 这种硬件解决方案,相比新唐的牛桥,要便捷一些。 芯片现阶段还...

功能演示的视频,楼主已经提交给我们商城。

大家可以前往这里观看视频:

【 ps: 该配音有些怪,经咨询楼主是用机器人来朗读的,说是机器人那样的普通话比他说得标准多了

《立创快报》总编辑、立创电子公共实验室建设者,企业QQ:2355740879
fashaoyou
0
主题
3
回复
发表于Fri Apr 21 22:06:20 CST 2017   |  只看该作者 12#

@那林 大神,这个板子我最近正好需要就搞了一块实验了一下,发现一个致命的问题,NXP的这款IC,貌似是不支持指定地址的单字节读写的?

针对的应用就是I2C器件的子地址,我看datasheet手册发现,I2C的操作指令只操作了器件的地址,而没有提到如何操作器件内部的寄存器地址(即子地址),只能使通过器件的0x00地址,一次性读写多字节数据。

现在搞不明白是我不会用,还是器件本身的问题?请大师指点。。。坐等,着急用

那林
8
主题
38
回复
发表于Sat Apr 22 09:23:23 CST 2017   |  只看该作者 13#
fashaoyou 发表于 Fri Apr 21 22:06:20 CST 2017  12# @那林 大神,这个板子我最近正好需要就搞了一块实验了一下,发...

NXP这个芯片还是较灵活的,但我实测过程中发现,官方的描述或操作方法不是很具体,这个芯片我测试过,可以指定地址读的。

具体你碰到了什么问题? 举例一下,或许我可以帮助到你。

厚积薄发,再创辉煌!
fashaoyou
0
主题
3
回复
发表于Sat Apr 22 11:23:13 CST 2017   |  只看该作者 14#
那林 发表于 Sat Apr 22 09:23:23 CST 2017  13# NXP这个芯片还是较灵活的,但我实测过程中发现,官方的描述或操...

NXP芯片手册上的I2C指令就是“Write N bytes to slave device和Read N byte from slave device”,举一个简答的例子,对从机写N个字节的指令是这样的: 

S CHAR:I2C开始指令;

SLAVE ADR+W:从机地址+1  表示写指令;

NUMBER:表示写多少个数据;

DATA:表示数据;

P:表示I2C终止指令;

指令中只有从机地址,没有从机的寄存器子地址。这样的指令只能针对那些子地址0x00开头的,并且递增的寄存器的读写操作,比如说:我一个从机地址是0x56,从机芯片中有诸多寄存器子地址,我改如何操作某个寄存器的读写操作呢?请大师指点

那林
8
主题
38
回复
发表于Wed May 03 21:02:23 CST 2017   |  只看该作者 15#

不好意思,最近忙, 很少来这里。

假设,你的从机地址是0x56, 寄存器地址是0x08 , 你写数据 0xF5 到 那个寄存器,你可以这样向串口发送:

53 56 02  08  F5  50


你要读那个寄存器的数据,在执行以上写入操作后(一般寄存器地址不变),你可以这样向串口发送53 57 01 50 

或者随机读的画,也可以尝试这样(我没试过) 53 57 01 08 50, 如果不行就采用写和读的连续写法(如下的规则)。

即:  53 56  01 08  53 57 01 50


 

厚积薄发,再创辉煌!
HONGGUAN
0
主题
2
回复
发表于Tue Sep 05 19:20:05 CST 2017   |  只看该作者 16#

正需要这个功能呢,可以试试了。


xcvista
1
主题
3
回复
发表于Wed Sep 06 17:26:47 CST 2017   |  只看该作者 17#
我怎么觉得用一颗 STM32F042F4P6 或 ATMEGA16U2 就够了呢?
。。
4
主题
72
回复
发表于Wed Sep 06 18:20:59 CST 2017   |  只看该作者 18#
xcvista 发表于 Wed Sep 06 17:26:47 CST 2017  17# 我怎么觉得用一颗 STM32F042F4P6 或 ATMEGA16U2 就够了呢?
硬件是够了,但软件呢?
xcvista
1
主题
3
回复
发表于Mon Sep 11 09:22:39 CST 2017   |  只看该作者 19#
。。 发表于 Wed Sep 06 18:20:59 CST 2017  18# 硬件是够了,但软件呢?
ATMEGA16U2 + HoodLoader2 + Arduino + 样板代码
  • 温馨提示:标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考:社区发帖规则
  • 您当前输入了 0个文字。还可以输入8000个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

顶部