問:ADA4350可寫不可讀是怎么回事,如何實現串口讀寫?
1ADA4350簡介
ADA4350集成TIA、開關及差分放大器在一個封裝內,非常適合對光電器件輸出的電流進行信號調理。芯片內部的六組開爾文式開關有兩種用法,既可以六組都給TIA用,這樣外部可配置六個不同電阻實現六種增益,覆蓋不同的輸入電流范圍;也可以TIA用三組開關,剩下的三組給后面的運放使用,共實現3x3
= 9種的增益。輸出運放可配置為差分輸出直接驅動差分輸入ADC。
芯片內部的六組開關,可以通過IO口并行控制,也可以用SPI串行控制,SPI時序圖和寄存器Map定義見芯片資料。
圖|ADA4350內部框圖
2SPI測試硬件環境
用STM32F103C8Tx的SPI口(PA4~PA7)控制ADA4350EVB.
ADA4350EVB配置如下:
DVDD短路到VCC, DGND短路到GND,E3631A提供+/-5V電源給VCC和VEE;
MODE接低(串行模式),ENABLE接高,LATCH接低;
并口模式下控制P0 ~ P4的開關切換到高電平(否則ADA4350的20~23腳接地,MCU無法進行控制);
將MCU控制板的CS/SCK/SDI/SDO共5根線連接到ADA4350EVB的20~23腳(SPI管腳)進行控制,兩板的地短接。用示波器抓取
CS/SCK/SDI/SDO時序。
3測試時序圖
測試時序圖見下,
先寫0x000820到ADA4350,即控制S11和S5導通;
再讀,先寫0x800000告訴芯片要讀寄存器,然后SDO線上會出現0x800820,最高位無效,最低12位為0x820,即剛寫進去的值;
需要注意的是在讀寫過程中,SCK下降沿有效。
圖|ADA4350 SPI時序圖
4參考代碼
代碼無他,需要注意靈活配置MCU的SPI,使之與ADA4350時序需求匹配即可。
參考代碼
代碼無他,需要注意靈活配置MCU的SPI,使之與ADA4350時序需求匹配即可。
int main(void)
{
while (1)
{
//Write 0x000820(enable S5 and S11 of ADA4350)
SPI_write_ADA4350(3,0x000820);
//Read the register value
SPI_read_ADA4350(3,0x800000);
//Print the reading value by UART
HAL_UART_Transmit(&huart1,Read_dvalue,3,0xFFFF);
//LED Blink
Led_blink();
Delay_ms(200); }
}
/***** SPI1 Initialization Function /
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler =
SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation =
SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if(HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
/ SPI WriteADA4350 /
void SPI_write_ADA4350(uint8_tsize,uint32_t data_value)
{
SPI_CS_HIGH //CS HIGH
SPI_CS_LOW //CS LOW
//SPI write 0x000820
SPI_write_buffer[0]=(uint8_t)((data_value&0x00ff0000)>>16);
SPI_write_buffer[1]=(uint8_t)((data_value&0x0000ff00)>>8);
SPI_write_buffer[2]=(uint8_t)(data_value&0x000000ff);
//write 3 bytes
HAL_SPI_Transmit(&hspi1, SPI_write_buffer, size, 0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(5);
}
/ SPI ReadADA4350 **/
uint8_t SPI_read_ADA4350(uint8_tsize,uint32_t data_value)
{
SPI_CS_HIGH //CS HIGH
SPI_CS_LOW //CS LOW
//SPI write 0x800000
SPI_write_buffer[0]=(uint8_t)((data_value&0x00ff0000)>>16);
SPI_write_buffer[1]=(uint8_t)((data_value&0x0000ff00)>>8);
SPI_write_buffer[2]=(uint8_t)(data_value&0x000000ff);
//write 3 bytes
HAL_SPI_Transmit(&hspi1, SPI_write_buffer, size, 0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(2);
//SPI RX
SPI_CS_LOW //CS LOW
//Read data into the Read_dvalue array
HAL_SPI_Receive(&hspi1,Read_dvalue,size,0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(5);
return 1;
}
-
放大器
+關注
關注
143文章
13589瀏覽量
213482 -
adc
+關注
關注
98文章
6498瀏覽量
544640 -
串口
+關注
關注
14文章
1554瀏覽量
76516 -
IO口
+關注
關注
3文章
170瀏覽量
24043
發布評論請先 登錄
相關推薦
評論