AD9626/AD9601系列ADC使用串行外设接口(Serial Peripheral Interface,SPI)总线进行内部寄存器的配置。该系列ADC涉及的引脚包括:
- CSB:片选信号(Chip Select Bank)引脚,低电平有效。
- SCLK:SPI时钟信号。
- SDIO:SPI串行数据信号。
该系列ADC的传输模式为:首先拉低片选信号CSB,随后向时钟线SCLK加载时钟、数据线SDIO加载数据。每次传输的数据比特会在时钟SCLK的上升沿被从数据线SDIO读取。传输完毕后,拉高片选信号CSB。
该系列ADC的SPI传输在单字节模式下,每次传输24个比特的指令帧Data[23:0]。MSB优先模式下,最先发送Data[23]。该指令帧的解释为:
- Data[23]:读写选通位R/W。向ADC发送数据(写寄存器)时,应置为0。
- Data[22:21]:数据字长选择位{W1, W0},指定该指令帧中数据负载的字节长度。单字节传输时,应取{W1, W0} == 2'b00,即数据负载长度为1字节1。
- Data[20:8]:13比特地址段ADDR[12:0],指示该指令帧的数据负载将被写入或读取的寄存器起始地址。对于AD9626/AD9601系列ADC,仅使用地址的低8位ADDR[7:0],地址的高5位ADDR[12:8]始终为0。
- Data[7:0]:8比特(1字节)数据负载,指示需要写入目标寄存器地址的数据。多字节模式(数据字长选择位{W1, W0} != 2'b00时)下,一个指令帧会包含多个数据负载。此时指令帧的长度为16 + 8 * N, N >= 1,N为数据负载个数。
每次传输结束后,可以向地址0xFF传送数据0x01,指示ADC将数据从缓冲区转移到实际寄存器内。
AD9626/AD9601系列ADC初始化需要的寄存器简表如下,有关详细信息,请参阅Analog Devices数据手册:
地址 | 名称 | 释义 |
---|---|---|
0x00 | chip_port_config | 芯片端口配置寄存器。该寄存器低4位和高4位在传输时必须互为镜像。chip_port_config[3]和chip_port_config[4]必须始终为1;chip_port_config[0]和chip_port_config[7]必须始终为0;chip_port_config[1]和chip_port_config[6]为1时,启用LSB优先传输方式,否则为MSB优先;chip_port_config[2]和chip_port_config[5]为1时,指示芯片进行软复位,软复位结束后这两个位将被自动置为0。该寄存器默认值为0x18。对该寄存器的写入会被设备立即响应。 |
0xFF | device_update | 寄存器更新指示寄存器。将device_update[0]置为1将强制芯片将数据从缓冲区刷新到实际的寄存器。结束后这个位将被自动置为0。该寄存器默认值为0x00。Analog Devices手册推荐在配置完所有寄存器后再发起数据转移。 |
0x08 | modes | 电源模式寄存器。将modes[5]置为1将使芯片进入待机模式。modes[2:0]指示了内部供电状态,3'b000为默认状态,3'b001为完全掉电状态,3'b010为待机状态,3'b011为默认状态。该寄存器默认值为0x00。 |
0x09 | clock | 时钟模式寄存器。将clock[0]置为1将启用占空比均衡器(Duty Cycle Stabilizer)。该寄存器默认值为0x01。 |
0x0D | test_io | 测试信号输出模式寄存器。将clock[3:0]置为非4'b0000的值将启用测试信号输出。该寄存器默认值为0x00。 |
0x0F | ain_config | 模拟信号输入模式寄存器。将ain_config[1]置为1将启用共模输出引脚(CML);将ain_config[2]置为1将禁用模拟输入。该寄存器默认值为0x00。 |
0x14 | output_mode | 输出模式寄存器。将output_mode[5]置为1将交错输出;将ain_config[4]置为1将禁用输出;将ain_config[2]置为1将反转输出;ain_config[1:0]指定了输出编码方式,2'b00为二进制偏移量,2'b01为补码输出,2'b10为格雷码输出。该寄存器默认值为0x00。 |
0x16 | output_phase | 输出相位寄存器。将output_phase[7]置为1将反转输出时钟极性。该寄存器默认值为0x03。 |
0x17 | flex_output_delay | 相位延时控制寄存器。将flex_output_delay[7]置为1将禁用输出延时;flex_output_delay[4:0]控制了输出延时的长度,单位为纳秒(ns),控制精度为0.1 ns,即Delay = flex_output_delay[4:0] * 0.1 + 0.1。该寄存器默认值为0x00。 |
0x18 | flex_vref | 输入电压范围控制寄存器。flex_vref[4:0]控制了输入电压的范围,单位为伏特(V),控制精度为0.02 V。flex_vref[4] == 1'b0时,有Vref = flex_vref[3:0] * 0.02 + 1.25;flex_vref[4] == 1'b1时,有Vref = flex_vref[3:0] * 0.02 + 0.982。该寄存器默认值为0x00。 |
下面的代码演示了AD9626/AD9601系列ADC的初始化。函数WriteADCParameters(int16 iCommand)调用SPI总线控制器,以单字节模式、MSB优先的传输方式传送控制字。16位整型参数iCommand的高8位为地址,低8位为数据,并被填充为24位指令帧的低16位。24位指令帧的高8位被自动填充为8'b00000000。初始化参数大多使用默认值,但修改了输入电压范围,并启用了共模输出(CML),并禁用了输出延迟。
//Initiate ADC soft reset //Commands sent to register 0x00 will be executed automatically //Thus we don't need to flush it to device by sending 0x01 to register 0x00 DeviceControl::WriteADCParameters(0x003C); usleep(2450); //"chip_port_config" register, use default value DeviceControl::WriteADCParameters(0x0018); //"modes" register, use default value (full power) DeviceControl::WriteADCParameters(0x0800); //"clock" register, use default value (duty cycle stabilizer enabled) DeviceControl::WriteADCParameters(0x0901); //"test_io" register, use default value (don't use test data) DeviceControl::WriteADCParameters(0x0D00); //"ain_config" register, enable CML (Common-Mode Output) DeviceControl::WriteADCParameters(0x0F02); //"output_mode" register, use default value (no interleave, enable output, no invert, offset binary mode) DeviceControl::WriteADCParameters(0x1400); //"output_phase" register, use default value (normal output clock polarity) DeviceControl::WriteADCParameters(0x1603); //"flex_output_delay" register, output delay disabled DeviceControl::WriteADCParameters(0x1780); //"flex_vref" register, use 5'b01111 (1.5V) DeviceControl::WriteADCParameters(0x180F); //Send command 0xff01 to flush data from Master register to Salve register DeviceControl::WriteADCParameters(0xFF01);
参考资料:
https://www.analog.com/media/en/technical-documentation/application-notes/AN-877.pdf
https://www.analog.com/media/en/technical-documentation/data-sheets/AD9601.pdf
https://www.analog.com/media/en/technical-documentation/data-sheets/AD9626.pdf