一、相互关系与计算
1.1 时钟、频率和波特率的关系
PCIE串口所支持的波特率与串口基准频率有关,需要根据实际使用的目标波特率调整串口基准频率。串口内部基准时钟来源包括:
- 外接晶体提供串口时钟:芯片内部具有频率振荡器,可通过外接晶体及电容产生串口所需时钟。
- 内部PLL提供串口时钟:将芯片CKSEL引脚接PERST#引脚,则通过内部PLL产生串口所需时钟,内部PLL频率为125MHz。
1.2 分频、倍频与波特率的关系
芯片内部可对时钟信号进行分频和倍频,分别产生各个串口的内部基准时钟。当时钟信号由外接晶体提供时,串口基准频率=外接晶体频率的1/12分频或者2倍频。当时钟信号由内部PLL提供时,串口基准频率=内部PLL频率的1/68分频或者不分频。计算公式:
串口波特率=串口基准时钟/16/分频寄存器(DLL/DLM)
针对串口非标准波特率的使用,即可通过更换外部晶体和更改内部频率系数来进行调整。在串口属性页面进行修改,驱动安装程序支持安装时进行频率的配置。
以PCI-Express转多串口芯片CH382/CH384为例:芯片内部具有时钟振荡器,可以通过外接晶体及电容产生串口所需的外部时钟信号。如果不接晶体和电容,那么将CKSEL 引脚接PERST#引脚则可以通过内部PLL 产生串口所需时钟。
CH384 内部将XO 引脚的外部时钟信号进行分频或倍频,分别产生各个串口的内部基准时钟。为了与现有计算机串口的16C550 芯片兼容,默认的内部时钟频率是1.8432MHz,对应的最大串口波特率是115200bps。CH384 芯片支持多种内部时钟频率,当内部时钟频率加倍时,如果应用软件不变,那么实际的通讯波特率也加倍,即应用软件设置为115200bps 的串口实际为230400bps。
CH384 的串口可以由CKSEL引脚或者外部配置芯片中的CFG/FREQ标志位选择分频或者倍频系数,将外部时钟的频率转换为两种内部时钟频率,从而支持更多更大的串口波特率。下表是根据CKSEL引脚、CFG/FREQ 标志位和外部晶体频率产生串口的内部时钟频率和最大串口波特率。表中CK2X是各串口的IER 寄存器的位5;表中CFG 是指外部配置芯片有效标志,CKnS(即CK0S~CK3S)分别为FREQ的位0~位3。
1.3 波特率计算
可直接使用波特率技术工具BaudrateCalcu_PCIEUART来快速计算:
下载链接: CH38XDRV.ZIP - 南京沁恒微电子股份有限公司,波特率计算工具在 CH38XDRV\TOOL目录。
以使用频率为36.864MHz的外部晶体为例,若需使用1152000波特率,通过如下步骤进行判断是否可支持该波特率:
- “外部晶振频率(Hz)”中输入外部晶体频率,分频系数选择“2倍频”;
- “波特率”输入目标波特率:1152000;
- 点击“计算”,下方输出栏输出计算结果,参数“FreqCErr”值代表计算的波特率误差,若波特率误差在1%以内则表示该波特率可设置使用。
这里提供常用晶振支持的波特率列表:
(注:下表中每种外部晶体所支持的波特率只列出了部分常用波特率,若所需使用波特率不在表中,可根据“串口波特率与时钟关系概述”部分描述进行计算)
外部晶体频率 |
内部频率系数 |
支持常用波特率 |
9.216Mhz |
1/12分频 |
4800、6000、8000、9600、12000、16000、24000、48000(最高波特率)等 |
2倍频 |
4800、9600、11520、12000、12800、14400、15360、16000、18000、19200、23040、24000、25600、28800、32000、36000、38400、46080、48000、57600、64000、72000、76800、96000、115200、128000、144000、192000、230400、288000、384000、576000、1152000(最高波特率)等 |
|
22.1184MHz |
1/12分频 |
4800、9600、11520、12800、14400、19200、23040、28800、38400、57600、115200(最高波特率)等 |
2倍频 |
4800、9600、12800、14400、19200、20480、21600、23040、25600、28800、30720、38400、43200、46080、51200、55296、57600、61440、69120、76800、86400、92160、102400、110592、115200、138240、153600、172800、184320、230400、276480、307200、345600、460800、552960、691200、921600、1382400、2764800(最高波特率)等 |
|
32MHz |
2倍频 |
12500、15625、16000、20000、25000、31250、32000、40000、50000、62500、80000、100000、125000、160000、200000、250000、400000、500000、800000、1000000、2000000、4000000(最高波特率)等 |
36.864MHz |
1/12分频 |
4800、9600、12000、12800、16000、19200、24000、32000、38400、48000、64000、96000、192000(最高波特率)等 |
2倍频 |
4800、9600、12800、14400、15360、19200、20480、23040、24000、25600、28800、30720、32000、36000、36864、38400、46080、48000、51200、57600、61440、64000、72000、76800、92160、96000、102400、115200、128000、144000、153600、184320、192000、230400、256000、288000、307200、384000、460800、512000、576000、768000、921600、1152000、1536000、2304000、4608000(最高波特率)等 |
二、具体操作:在驱动中设置
CH38XDRV驱动默认使用22.1184MHz的外部晶体,若使用其他频率的外部晶体或内部PLL时钟时,需对其串口时钟信号等进行配置。
设置时,应使串口处于关闭状态,设置完成后即刻生效无需重启电脑。根据配置的串口基准时钟,使用波特率误差应控制在1%以内。
具体设置:
打开设备管理器,选择CH382/CH384的PCIE转出的串口,双击弹出串口属性页,选择“端口设置”,点击“高级(A)…”后弹出高级设置选项。
2.1 外部晶体提供串口时钟
当启用外部晶振为串口提供时钟时,具体步骤:
- “串口时钟信号来源”选择外部晶体,分频系数需根据实际使用的波特率进行设定(注:当选用22.1184MHz晶体时,驱动默认在串口波特率大于115200时会自动启用2倍频;若是其他频率外部晶体则需手动选择“2倍频”)。
- “外部晶体频率”一栏中填写实际的晶体频率(驱动默认设置为:22118400,对应22.1184MHz晶体)。
- 输入选用的外部晶体频率值,点击“>>”计算得出内部串口时钟频率。也可输入串口基准频率,点击“<<”根据当前分频系数计算得出外部晶体频率。
- 点击“确定”,驱动保存设置且立即生效。
2.2 内部PLL提供时钟
当启用内部PLL来为串口提供时钟时,需将硬件的CKSEL引脚与PERST#引脚相连。并进行如下设置:文章来源:https://www.toymoban.com/news/detail-626895.html
- “串口时钟信号来源”选择“内部PLL”,分频系数根据根据实际使用情况进行设定;
- 点击“确定”,系统将会保存此次设置且立即生效。
以上介绍了PCIe转串口的时钟与频率、分频与倍频和波特率之间的关系,使用不同波特率晶振的计算,以及在驱动中设置不同波特率的步骤,希望对需要使用超高波特率、非标波特率等应用有所帮助。 文章来源地址https://www.toymoban.com/news/detail-626895.html
到了这里,关于PCIe转多串口CH382/CH384时钟和波特率、分频与倍频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!