372 lines
8.6 KiB
C
372 lines
8.6 KiB
C
![]() |
/*
|
|||
|
* fml_PMIC.c
|
|||
|
*
|
|||
|
* Created on: 2025年4月10日
|
|||
|
* Author: 22332
|
|||
|
*/
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include "cola_init.h"
|
|||
|
#include "cola_device.h"
|
|||
|
#include "bsp_register_map.h"
|
|||
|
#include "shell.h"
|
|||
|
#include "fml_PMIC.h"
|
|||
|
#include "fml_gpio.h"
|
|||
|
|
|||
|
static cola_device_t *g_pDev_pmic_iic = NULL;
|
|||
|
|
|||
|
static bool ACK;
|
|||
|
|
|||
|
|
|||
|
void fml_pmic_write_to_mtp(void)
|
|||
|
{//Enable write data
|
|||
|
uint8_t address = 0xFF,value = 0x80;
|
|||
|
cola_delay_ms(2);
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,&value,1);
|
|||
|
cola_delay_ms(500);
|
|||
|
if(ACK == 0)
|
|||
|
logWrite("MTP write error\r\n");
|
|||
|
}
|
|||
|
|
|||
|
void fml_pmic_init(void)
|
|||
|
{
|
|||
|
g_pDev_pmic_iic = cola_device_find("PMIC_IIC");
|
|||
|
fml_PAVDD_out_voltage(0x10);//5.8v
|
|||
|
cola_delay_ms(10);
|
|||
|
fml_NAVDD_out_voltage(0x10);//5.8v
|
|||
|
cola_delay_ms(10);
|
|||
|
fml_VGH_out_voltage(0x06); //10v
|
|||
|
cola_delay_ms(10);
|
|||
|
fml_VGL_out_voltage(0x0C);//-9V
|
|||
|
|
|||
|
fml_pmic_write_to_mtp();
|
|||
|
}
|
|||
|
|
|||
|
uint8_t* detect_power_fault()
|
|||
|
{ static bool power_fault[4] = {0};
|
|||
|
uint8_t s_receiveBuffer[1];
|
|||
|
uint8_t address = FAULT_ANALYSIS;
|
|||
|
cola_device_read(g_pDev_pmic_iic,address,s_receiveBuffer,0);
|
|||
|
power_fault[0] = s_receiveBuffer[0] & 0x01;
|
|||
|
power_fault[1] = s_receiveBuffer[0] & 0x02;
|
|||
|
power_fault[2] = s_receiveBuffer[0] & 0x04;
|
|||
|
power_fault[3] = s_receiveBuffer[0] & 0x08;
|
|||
|
return (uint8_t*)power_fault;
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
PAVDD Output Voltage Setting
|
|||
|
0X00~0X2E: 5.00V~7.30V unit:0.05V
|
|||
|
*/
|
|||
|
bool fml_PAVDD_out_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = PAVDD;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,&data,1);
|
|||
|
if(ACK == 0)
|
|||
|
logWrite("PAVDD write error\r\n");
|
|||
|
return ACK;
|
|||
|
}
|
|||
|
/*
|
|||
|
NAVDD Output Voltage Setting
|
|||
|
0X00~0X2E: -5.00V~-7.30V unit:0.05V
|
|||
|
*/
|
|||
|
void fml_NAVDD_out_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = NAVDD;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,&data,1);
|
|||
|
if(ACK == 0)
|
|||
|
logWrite("NAVDD write error\r\n");
|
|||
|
}
|
|||
|
//0X00~0X2E: 7.00V~30.0V unit:0.5V
|
|||
|
void fml_VGH_out_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGH;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,&data,1);
|
|||
|
if(ACK == 0)
|
|||
|
logWrite("VGH write error\r\n");
|
|||
|
|
|||
|
}
|
|||
|
//0X00~0X30: -6.00V~-18.0V unit:0.25V
|
|||
|
void fml_VGL_out_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGL;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,&data,1);
|
|||
|
if(ACK == 0)
|
|||
|
logWrite("VGL write error\r\n");
|
|||
|
}
|
|||
|
//0X00~0XFA: -3.00V~-2.00V unit:20mV
|
|||
|
void fml_VCOM_C_out_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VCOM_C;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
//0X00~0X03: 2V~8V unit:2V
|
|||
|
void fml_VGH_LOW_TEMP_COMPENSATION_voltage(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGH_LOW_TEMP;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
//0X00:600KHZ 0x01:800KHZ 0x02:1MHZ 0x03:2.2MHZ
|
|||
|
void fml_switching_frequency(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = SW_FREQ;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
PAVDD Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_PAVDD_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = PAVDD_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
PAVDD Soft-start time Setting
|
|||
|
0x00~0x07:5ms~40ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_PAVDD_SOFT_START_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = PAVDD_SOFT_START;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGL Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_VGL_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGL_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGL Soft-start time Setting
|
|||
|
0x00~0x07:3ms~24ms unit:3ms
|
|||
|
*/
|
|||
|
void fml_VGL_SOFT_START_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGL_SOFT_START;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGH Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_VGH_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGH_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGH Soft-start time Setting
|
|||
|
0x00~0x03:5ms~20ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_VGH_SOFT_START_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGH_SOFT_START;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
NAVDD Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_NAVDD_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = NAVDD_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
NAVDD Soft-start time Setting
|
|||
|
0x00~0x07:5ms~40ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_NAVDD_SOFT_START_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = NAVDD_SOFT_START;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VCOM Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_VCOM_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VCOM_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
RESET Power-on Delay Time Setting
|
|||
|
0x00~0x0F:0ms~75ms unit:5ms
|
|||
|
*/
|
|||
|
void fml_RESET_ON_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = RESET_ON_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
Power-off Delay Time Setting
|
|||
|
0x00~0x0F:0ms~45ms unit:3ms
|
|||
|
*/
|
|||
|
void fml_POWER_OFF_DELAY_time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = POWER_OFF_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
OPTION1:
|
|||
|
RESET goes low following power-off delay time or VGH channel turn off[7]
|
|||
|
0:power-off delay 1:VGH channel turn off
|
|||
|
The voltage detector monitors the VIN voltage to
|
|||
|
generate a RESET signal from RESET pin while VIN is
|
|||
|
lower than the detecting level
|
|||
|
detecting level:[6:5]
|
|||
|
0x00:UVLO Falling 0x01:2.1V 0x02:2.4V 0x03:2.7V
|
|||
|
Discharge Function:
|
|||
|
PAVDD Discharge Function:[4]
|
|||
|
NAVDD Discharge Function:[3]
|
|||
|
VGH Discharge Function:[2]
|
|||
|
VGL Discharge Function:[1]
|
|||
|
VCOM Discharge Function:[0]
|
|||
|
0:ON 1:OFF
|
|||
|
*/
|
|||
|
void fml_OPTION1_SETTING(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = OPTION1;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
OPTION2:
|
|||
|
PAVDD Slew Rate Setting:[7:6]
|
|||
|
NAVDD Slew Rate Setting:[5:4]
|
|||
|
VGL Slew Rate Setting:[3:2]
|
|||
|
VGH Slew Rate Setting:[1:0]
|
|||
|
0x00:Fast 0x01:Normal 0x02:Slow 0x03:Slowest
|
|||
|
*/
|
|||
|
void fml_SLEW_RATE_SETTING(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = OPTION2;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
OPTION3:
|
|||
|
VGL Internal/External Option[5]
|
|||
|
0:internal 1:external
|
|||
|
frequency spread:[4:3]
|
|||
|
0x00:off 0x01:3% 0x02:6%
|
|||
|
Over Temperature Protection (OTP):[2]
|
|||
|
Under Voltage Protection (UVP):[1]
|
|||
|
Short Circuit Protection (SCP):[0]
|
|||
|
0:ON 1:OFF
|
|||
|
*/
|
|||
|
void fml_OPTION3_SETTING(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = OPTION3;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
Channel ON/OFF Option:
|
|||
|
RESET EN:[5]
|
|||
|
VCOM EN:[5]
|
|||
|
NAVDD EN:[5]
|
|||
|
VGH EN:[5]
|
|||
|
VGL EN:[5]
|
|||
|
PAVDD EN:[5]
|
|||
|
0:OFF 1: ON
|
|||
|
*/
|
|||
|
void fml_Channel_on_off_SETTING(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = CHANNEL_ON_OFF_OPTION;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
Auto Refresh Functions:
|
|||
|
registers code auto recovery function if the registers code is changed abnormally
|
|||
|
|
|||
|
Auto Refresh Enable:[0]
|
|||
|
0:off 1:on
|
|||
|
Refreshing Time:[2:1]
|
|||
|
0x00:0.25s 0x01:0.5s 0x02:0.75s 0x03:1s
|
|||
|
FAULT Behavior:[3]
|
|||
|
0:Fault pin not output low 1:Fault pin output low
|
|||
|
*/
|
|||
|
void fml_Auto_Refresh_SETTING(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = AUTO_REFRESH_OPTION;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
PAVDD Off Delay Time[2:0]
|
|||
|
0x00~0x07:0ms~14ms unit:2ms
|
|||
|
*/
|
|||
|
void fml_PAVDD_off_Delay_Time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = PAVDD_OFF_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
NAVDD Off Delay Time[2:0]
|
|||
|
0x00~0x07:0ms~14ms unit:2ms
|
|||
|
*/
|
|||
|
void fml_NAVDD_off_Delay_Time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = NAVDD_OFF_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGH Off Delay Time[2:0]
|
|||
|
0x00~0x07:0ms~14ms unit:2ms
|
|||
|
*/
|
|||
|
void fml_VGH_off_Delay_Time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGH_OFF_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
VGL Off Delay Time[2:0]
|
|||
|
0x00~0x07:0ms~14ms unit:2ms
|
|||
|
*/
|
|||
|
void fml_VGL_off_Delay_Time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = VGL_OFF_DELAY;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
/*
|
|||
|
FAULT Analysis Clear Option[3]
|
|||
|
0:Not Clear 1:Clear
|
|||
|
VCOM Off Delay Time[2:0]
|
|||
|
0x00~0x07:0ms~14ms unit:2ms
|
|||
|
*/
|
|||
|
void fml_FAULT_VCOM_off_Delay_Time(uint8_t data)
|
|||
|
{
|
|||
|
uint8_t address = FAULT_VCOM;
|
|||
|
ACK = cola_device_write(g_pDev_pmic_iic,address,0,data);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|