Files

176 lines
4.7 KiB
C

/*================================================================
Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
Quectel Wireless Solutions Proprietary and Confidential.
=================================================================*/
#ifndef _QL_SPI_H_
#define _QL_SPI_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef enum SPI_CLK_ENUM
{
SPI_CLK_INVALID=-1,
SPI_CLK_100KHZ=0,
SPI_CLK_200KHZ,
SPI_CLK_300KHZ,
SPI_CLK_400KHZ,
SPI_CLK_500KHZ,
SPI_CLK_600KHZ,
SPI_CLK_700KHZ,
SPI_CLK_812_5KHZ,
SPI_CLK_1_625MHZ,
SPI_CLK_3_25MHZ,
SPI_CLK_6_5MHZ,
SPI_CLK_13MHZ,
SPI_CLK_26MHZ,
SPI_CLK_52MHZ,
SPI_CLK_MAX,
}SPI_CLK_E;
typedef enum SPI_MODE_ENUM
{
SPI_MODE_INVALID=-1,
SPI_MODE0=0,
SPI_MODE1,
SPI_MODE2,
SPI_MODE3,
SPI_MODE_MAX,
}SPI_MODE_E;
typedef enum SPI_PORT_ENUM
{
SPI_PORT_INVALID = -1,
SPI_PORT0 = 0, //GPIO16-GPIO19
SPI_PORT1 = 1, //GPIO33-GPIO36
SPI_PORT2 = 2, //GPIO4 -GPIO7
SPI_PORT_MAX,
}SPI_PORT_E;
enum{
QL_SPI_NAND_DEV0 = 0,
QL_SPI_NAND_DEV2 = 2
};
enum{
QL_SPI_NAND_PIN_16_19 ,
QL_SPI_NAND_PIN_33_36
};
enum{
QL_SPI_NAND_CLOCK_13M = 0x0,
QL_SPI_NAND_CLOCK_26M = 0x1,
QL_SPI_NAND_CLOCK_52M = 0x2,
};
/*****************************************************************
* Function: ql_spi_init
* Description: SPI_INIT
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* spimode [in] 控制器模式:QL_SPI_MODE0,QL_SPI_MODE1,QL_SPI_MODE2,QL_SPI_MODE3,
* spiclk [in] 传输时钟
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_init(SPI_PORT_E port, SPI_MODE_E spimode, SPI_CLK_E spiclk);
/*****************************************************************
* Function: ql_spi_write
* Description:SPI写数据
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* buf [in] 存放写入的数据
* len [in] 写数据的长度
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_write(SPI_PORT_E port, unsigned char *buf, unsigned int len);
/*****************************************************************
* Function: ql_spi_read
* Description:SPI读数据
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* buf [in] 存放读取的数据
* len [in] 读取数据的长度
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_read(SPI_PORT_E port, unsigned char *buf, unsigned int len);
/*****************************************************************
* Function: ql_spi_write_read
* Description:SPI数据读写
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* inbuf [in] 存放写入的数据
* outbuf [in] 存放读出的数据
* len [in] 读写数据的长度
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_write_read(SPI_PORT_E port, unsigned char *inbuf, unsigned char *outbuf, unsigned int len);
/*****************************************************************
* Function: ql_spi_pio_width_write
* Description:SPI写数据,带位宽参数
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* buf [in] 存放写入的数据
* len [in] 写数据的长度
* bit_width [in] 位宽配置,如8bit/9bit
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_pio_width_write(SPI_PORT_E port, unsigned int *buf, unsigned int len, int bit_width);
/*****************************************************************
* Function: ql_spi_pio_width_read
* Description:SPI读数据
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* buf [in] 存放读取的数据
* len [in] 读取数据的长度
* bit_width [in] 位宽配置,如8bit/9bit
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_pio_width_read(SPI_PORT_E port, unsigned int *buf, unsigned int len, int bit_width);
/*****************************************************************
* Function: ql_spi_pio_width_write_read
* Description:SPI数据读写
*
* Parameters:
* port [in] SPI引脚选择SS0\SS2。
* inbuf [in] 存放写入的数据
* outbuf [in] 存放读出的数据
* len [in] 读写数据的长度
* bit_width [in] 位宽配置,如8bit/9bit
* Return:
* 0 成功。
* -1 失败。
*****************************************************************/
int ql_spi_pio_width_write_read(SPI_PORT_E port, unsigned int *inbuf, unsigned int *outbuf, unsigned int len, int bit_width);
#ifdef __cplusplus
} /*"C" */
#endif
#endif /* _QL_UART_H_ */