Si5395/94/92芯片配置步骤
第一次写博客(学习笔记),记录一次Si5394时钟芯片的配置,写这个教程的原因也是因为自己在网上搜资料的时候,用的人少之又少,让后面用到的人少走些弯路吧。
前3点为芯片的主要介绍,配置直接看第4点
1.时钟介绍
摘点datasheet的介绍吧,总之高端就完事儿了,可以实现超低相位抖动输出任何频率时钟。
12-Channel, Any-Frequency, Any-Output Jitter Attenuator/Clock Multiplier with Ultra-Low Jitter
The Si5395/94/92 Jitter attenuators combine fourth-generation DSPLL™ and MultiSynth™ technologies to deliver ultra-low jitter (69 fs) for high performance applications like 56G SerDes. They are used in applications that demand the highest level of integration and jitter performance. All PLL components are integrated on-chip,
eliminating the risk of noise coupling associated with discrete solutions.
2.时钟工作模式
时钟主要的工作模式这边就简单讲2钟:自由模式和时钟选择锁定模式,工作状态有好几种,参考手册上有具体几种状态的切换流程,如下图。
Free run状态:即时钟锁相环未锁定INPUT时钟,而是采用外部/内部参考时钟作为输入源。
Locked Mode:即时钟检测到有效INPUT时钟并且达到预期频率值,进入锁定状态。
3.几处重要寄存器
(1)参考时钟
官方给出三种参考时钟设计方式,第一种是官方推荐的方式,但是由于工作需要采用第三种单端输入方式。配置寄存器为XA_XB_EXTCLK 0x090E[0]
(2)芯片输入输出总框图
输入时钟选择寄存器配置方式:
(3)芯片初始化流程
如果涉及到对锁相环寄存器配置,如PXAXB、PX_NUM、PX_NUMPX_DEN、MXAXB_NUM、MXAXB_DEN、M_NUM、M_DEN,则需要按照以下流程进行芯片寄存器配置
4.软件配置实现
1.下载SILICON官网专门配置芯片的GUI工具ClockBuild PRO
2.软件使用手册
软件支持配置的芯片型号如下:
操作步骤:
打开CB Pro,选择Create New Project-Jitter Attenuators-选择芯片型号,下面展示几步重要操作,其余步骤根据需求选择
Step 3 of 17 -Application & Reference:
Step 6 of 17 -Define Input Clocks:
Step 8 of 17 - Define Output Clocks:
Step 8 of 17 - DSPLL Configure:
按照软件给出的所有选项按需选择后,终于来到最后最终要的一步——导出寄存器配置。芯片的配置依旧是依靠I2C总线读写寄存器实现的!!!!!按照下图导出寄存器配置
导出后打开header file可以看到500多个寄存器配置值,如下:
/*
* Si5394 Rev A Configuration Register Export Header File
*
* This file represents a series of Silicon Labs Si5394 Rev A
* register writes that can be performed to load a single configuration
* on a device. It was created by a Silicon Labs ClockBuilder Pro
* export tool.
*
* Part: Si5394 Rev A
* Design ID: 1
* Includes Pre/Post Download Control Register Writes: Yes
* Created By: ClockBuilder Pro v2.45 [2020-07-16]
* Timestamp: 2020-09-01 11:10:50 GMT+08:00
*
* A complete design report corresponding to this export is included at the end
* of this header file.
*
*/
#ifndef SI5394_REVA_REG_CONFIG_HEADER
#define SI5394_REVA_REG_CONFIG_HEADER
#define SI5394_REVA_REG_CONFIG_NUM_REGS 513
typedef struct
{
unsigned int address; /* 16-bit register address */
unsigned char value; /* 8-bit register data */
} si5394_reva_register_t;
si5394_reva_register_t const si5394_reva_registers[SI5394_REVA_REG_CONFIG_NUM_REGS] =
{
/* Start configuration preamble */
{ 0x0B24, 0xC0 },
{ 0x0B25, 0x00 },
{ 0x0540, 0x01 },
/* End configuration preamble */
/* Delay 300 msec */
/* Delay is worst case time for device to complete any calibration */
/* that is running due to device state change previous to this script */
/* being processed. */
/* Start configuration registers */
{ 0x0006, 0x00 },
{ 0x0007, 0x00 },
{ 0x0008, 0x00 },
{ 0x000B, 0x68 },
{ 0x0016, 0x02 },
{ 0x0017, 0xDC },
{ 0x0018, 0xDD },
{ 0x0019, 0xDD },
{ 0x001A, 0xDF },
{ 0x002B, 0x02 },
{ 0x002C, 0x02 },
{ 0x002D, 0x00 },
{ 0x002E, 0x00 },
{ 0x002F, 0x00 },
...........
篇幅原因 省略部分寄存器
...........
{ 0x0C02, 0x03 },
{ 0x0C03, 0x02 },
{ 0x0C07, 0x01 },
{ 0x0C08, 0x01 },
/* End configuration registers */
/* Start configuration postamble */
{ 0x0514, 0x01 },
{ 0x001C, 0x01 },
{ 0x0540, 0x00 },
{ 0x0B24, 0xC3 },
{ 0x0B25, 0x02 },
/* End configuration postamble */
};
接下来就是按照上面第3点的第(3)小点提到的更新芯片寄存器方式,MCU通过I2C写入所有500多个寄存器数据实现时钟配置!具体实现源码不难,利用上面header file中的数据结构进行写入即可,非常便捷。
到此所有的配置全部完成!