SC16IS752芯片和电路原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文库资料 ©2017 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.
第1章 SC16IS752芯片和电路原理
1.1.1 SC16IS752芯片介绍
SC16IS752是I 2C 总线/SPI 总线接口,双通道高性能的UART 扩展芯片,串口数据传输速率高达5Mbit/s ,每路串口有64Bytes 的读写FIFO 和一个可编程的波特率发生器,具备省电模式和睡眠模式,还提供了8个额外可编程的I/O 脚,并且支持传输速率高达1.1152Mbit/s 的IrDA ,可实现自动硬件和软件流控,自动的RS-485读写切换和软件复位等功能。
1. 通用特性
● 64字节FIFO (发送器和接收器) ● 与工业标准16C450完全兼容并等效 ● 在16×时钟模式下波特率高达5Mbit/s
●
使用RTS/CTS 的自动硬件流控制
● 带有可编程Xon/Xoff 字符的自动软件流控制 ● 一个或两个Xon/Xoff 字符
● 自动的RS-485支持(自动的从地址检测) ● 多达8个可编程的I/O 脚
●
经过RTS 信号的RS-485驱动器方向控制
● RS-485驱动器方向控制翻转 ● 内置IrDA 编码器和译码器接口 ● 支持的IrDA 速率高达115.2kbit/s ● 软件复位
● 发送器和接收器可相互独立使能/禁能 ● 接收和发送FIFO 电平 ● 可编程的特殊字符检测 ● 完全可编程的字符格式:
⏹ 5,6,7或8位字符 ⏹ 偶、奇或无奇偶格式 ⏹ 1,1.5或2个停止位 ● Line break 的产生和检测 ● 内部回送模式
● 3.3V 时的睡眠电流低于30μA ● 工业和商业温度范围 ● 5V 容限输入
● HVQFN32和TSSOP28封装
文库资料 ©2017 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.
2. I 2
C 总线特性
● SCL/SDA 输入上的噪声滤波器 ● 400kbit/s (最大速率) ● 遵循I 2C 总线高速 ● 仅为从机模式 3. SPI 特性
● 最高速率为4Mbit/s ● 仅为从机模式 ● SPI 模式0 1.1.2 电路原理
本章的驱动实现基于SC16IS752芯片,通过I 2C 实现两路串口扩展。与SC16IS752相关电路原理图如图1.1所示。
图1.1SC16IS752原理图
对应的主控制器为AM3352处理器,I 2C 和INT 这3个信号没有在原理图中体现出来,I 2C 接到处理器的I2C2上,中断INT 接到处理器的GPIO 上。 1.1.3 驱动移植思路
由于采用I 2C 接口,通过I 2C 实现UART 扩展,在驱动方面也会涉及两方面内容:I
2C 和UART 两个驱动体系。首先需要按照普通I 2C 器件驱动添加方式,将该芯片接入I 2C 子系统,成功后才能通过I 2C 总线操作芯片内部的寄存器。能通过I 2C 进行芯片寄存器操作后,遵照UART 器件驱动编写规则,将该芯片驱动接入Serial 子系统,最终实现I 2C 到UART 的扩展。
另外还涉及到中断,这些内容在前面的驱动中已经多次用到。
本章虽然基于AM3352处理器,但很容易推广到其它平台,过程也非常简单,仅需对I 2C 和中断部分驱动进行简单移植即可。
文库资料 ©2017 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.
1.2 I 2C 接口驱动实现
1.2.1 定义i2c_device_id
首先为SC16IS752芯片定义i2c_device_id ,用于I 2C 驱动进行匹配。实现如程序清单1.1所示。
程序清单1.1sc16is752_ids 定义
static const struct i2c_device_id sc16is752_ids[]={ {"sc16is752",0}, {},
};
芯片名称可以任意定义,在这里定义为“sc16is752”,保持与芯片名称一致,这是通常做法。
1.2.2 添加注册I 2C 设备
这部分代码与平台相关,在不同平台上的实现可能会稍有不同。
对于本章所采用的平台,AM3352,Linux 内核版本为3.2.0。添加I 2C 设备注册建议在平台主板文件中实现。本章修改
static struct i2c_board_info am335x_i2c2_boardinfo[] = { {I2C_BOARD_INFO("sc16is752",0x48),},
/* 设备名称和从机地址
*/
};
说明,设备名要与定义的i2c_device_id 中的某一个相匹配。
编写i2c2_init 函数,在其中通过omap_register_i2c_bus()完成设备注册。由于SC16IS752接在AM3352的I2C2上,根据BSP 的I 2C 定义,对应的I 2C 总线序号为3;另外为了保证UART 能实现较高波特率,在此设置I2C 总线速率为400kbps 。i2c2_init()函数实现代码如程序清单1.2所示。
程序清单1.2i2c2_init 函数实现
static void i2c2_init(int evm_id, int profile) { setup_pin_mux(i2c2_pin_mux);
omap_register_i2c_bus(3, 400, am335x_i2c2_boardinfo ,
ARRAY_SIZE(am335x_i2c2_boardinfo)); return;
}
为了便于理解,这里给出omap_register_i2c_bus()函数原型,如下:
int __init omap_register_i2c_bus(int bus_id, u32 clkrate,struct i2c_board_info const *info,unsigned len);
最后,将i2c2_init 函数加入zy_m3352_dev_cfg 初始化列表即可。