sharp_spi_iic — SPI - IIC 控制模块

################### SPI 传输类型 ###################

SPI_WR    = 0x0000      #双向传输
SPI_OnlyW = 0x0001      #只发送
SPI_OnlyR = 0x0002      #只接收


################### IIC 传输类型 ###################
I2C_START_W    = 0x0000      #Start+WAddr+WDat
I2C_W          = 0x0001      #WDat
I2C_START_R    = 0x0100      #Start+RAddr+RDat
I2C_R          = 0x0200      #RDat
I2C_P           =0x8000      #Stop 中途需要发送停止位


###################SPI模式##############################
User_SPI_4Wire = 0x00 
User_SPI_3Wire = 0x10 
User_SPI_DSPI  = 0x20 
User_SPI_QSPI  = 0x30 
class sharp_spi_iic.IIC

基类:object

IIC模块类

  • 参数
    • kwargs 可变参数

  • 返回
    • adapter 设备类

  • 说 明 :id(id号 必须要传 硬件IIC–1,软件IIC–0 当前只实现软件IIC)

    scl(scl对象 对应IO口宏 硬件IIC可以不传) id置为1后 此值无效 sda(sda对象 对应IO口宏 硬件IIC可以不传) id置为1后 此值无效 freq (scl 的最大频率) timeout (等待ack超时时间) iic_delay(IIC时钟和数据脚的间隔时间 可以通过此去控制IIC速率默认为1,对应时钟速率90K) number(当前初始化IIC的序列号) 默认为0 当需要初始化多组IIC的时候需要赋值

  • 示例:

I2C_P = 32768
I2C_R = 512
I2C_START_R = 256
I2C_START_W = 0
I2C_W = 1
IIC_transfer(message, msgs_num)

iic自定义发送数据

  • 参数
    • adap 设备类

    • message 消息类

    • msgs_num :连续处理包个数

  • 返回 : 无

  • 示例byte_buf = bytearray(5)

    message = iic_message() message.iic_type = I2C_START_R 类型 见第14行 message.iic_len = 5 message.IIC_Buffer = byte_buf 此处传的是发送的byte,如果有接收可在IIC_transfer后面在回读一下IIC_Buffer IIC_transfer(adapter,message)

recv(addr, length)

iic接收一次数据

  • 参数
    • addr :器件地址

    • data_len :接收数据长度

  • 返回 : 无

  • 示例 :

send(addr, send_length, length)

iic发送一次数据

  • 参数
    • addr :器件地址

    • data :发送数据缓冲区

    • data_len :发送数据长度

  • 返回 : 无

  • 示例 :

sharp_spi_iic.SHARP_IIC_DevExist(adap, addr)

判断器件是否存在

  • 参数
    • adap: 设备类

    • addr: 地址

  • 返回
    • 0地址存在

    • -1地址不存在

sharp_spi_iic.SHARP_IIC_init(**kwargs)

IIC初始化

  • 参数
    • kwargs 可变参数

  • 返回
    • adapter 设备类

  • 说 明 :id(id号 必须要传 硬件IIC–1,软件IIC–0 当前只实现软件IIC)

    scl(scl对象 对应IO口宏 硬件IIC可以不传) id置为1后 此值无效 sda(sda对象 对应IO口宏 硬件IIC可以不传) id置为1后 此值无效 freq (scl 的最大频率) timeout (等待ack超时时间) iic_delay(IIC时钟和数据脚的间隔时间 可以通过此去控制IIC速率默认为1,对应时钟速率90K) number(当前初始化IIC的序列号) 默认为0 当需要初始化多组IIC的时候需要赋值

  • 示例: 软件IIC IIC_init(id = 0,scl = LCD_TP_SCL,sda = LCD_TP_SDA,freq=10000,iic_delay = 1)

sharp_spi_iic.SHARP_IIC_transfer(adap, message, msgs_num)

iic发送接收方法

  • 参数
    • adap 设备类

    • message 消息类

    • msgs_num :连续处理包个数

  • 返回 : 无

  • 示例byte_buf = bytearray(5)

    message = iic_message() message.iic_type = I2C_START_R 类型 见第14行 message.iic_len = 5 message.IIC_Buffer = byte_buf 此处传的是发送的byte,如果有接收可在IIC_transfer后面在回读一下IIC_Buffer IIC_transfer(adapter,message)

sharp_spi_iic.SHARP_SPI_CS_LevelSet(Level)

软件控制复用后的片选

  • 参数
    • Level : 1–高电平 0–低电平 其他–无效

  • 返回 : 无

sharp_spi_iic.SHARP_SPI_DataBit_Mode(databit)

控制数据位切换。

  • 参数
    • databit : 数据位 8–8bit 9–9bit 其他–无效

  • 返回 : 无

sharp_spi_iic.SHARP_SPI_DataIo_ModeSet(mode)

控制数据引脚输入输出切换

  • 参数
    • mode : 模式 1–输出 0–输入 其他–无效

  • 返回 : 无

sharp_spi_iic.SHARP_SPI_WireMode(mode)

SPI模式修改 可供选择的模式有 三线spi,四线SPI,DSPI,QSPI * 参数

  • fmode :模式

  • 返回 : 无

sharp_spi_iic.SHARP_SPI_transfer(adap, message, msgs_num)

spi发送接收方法

  • 参数
    • adap :设备类

    • message :消息类

    • msgs_num :连续处理包个数

  • 返回 : 无

  • 示例byte_buf = bytearray(5)

    message = spi_message() message.spi_type = SPI_OnlyW 类型 见第14行 message.spi_len = 5 message.RX_Buffer = byte_buf 有接收时候在传 byte类型数据 message.TX_Buffer = byte_buf 有发送的时候在传 SPI_transfer(adapter,message)

sharp_spi_iic.SHARP_spi_init(**kwargs)

spi初始化

  • 参数
    • kwargs 可变参数

  • 返回
    • adapter 设备类

  • 说 明 :id(id号 必须要传 硬件spi–1,软件spi–0,1.配置硬件SPI时,模式配置完之后还需要把引脚配成复用。2.软件SPI只实现了4线模式)

    mode(SPI模式 3–三线SPI 4–四线SPI 5–DSPI 6–QSPI 默认说4线SPI 必须要传) baudrate(分频值 主频是50M分频 默认10–5M 必须要传) polarity(极性可以是 0 或 1,是时钟空闲时所处的电平。默认0 必须要传) phase (相位可以是 0 或 1,分别在第一个或者第二个时钟边缘采集数据。默认0 必须要传) bits (每次传输的数据长度,默认是 8 位。 可以不传) firstbit (传输数据从高位开始还是从低位开始 默认MSB 可以不传) sck (sck对象 对应IO口宏) id 置为1后 此值无效 mosi (mosi对象 对应IO口宏) id 置为1后 此值无效 miso (miso对象 对应IO口宏) id 置为1后 此值无效 number(当前初始化spi的序列号) 默认为0 当需要初始化多组spi的时候需要赋值

  • 示例: 软件spi adapter = spi_init(id = 0,mode = 4,baudrate = 10,polarity = 1,phase = 1,sck = LCD_TP_SCK,mosi = LCD_TP_MOSI,miso = LCD_TP_MISO)
    硬件spi adapter = spi_init(id = 1,mode = 4,baudrate = 10,polarity = 1,phase = 1,sck = LCD_TP_SCK,mosi = LCD_TP_MOSI,miso = LCD_TP_MISO) #配置硬件SPI时,模式配置完之后还需要把引脚配成复用。

    UserIO_AF_Set(USER_TP_MISO_AF,USER_IO_AF) UserIO_AF_Set(USER_TP_MOSI_AF,USER_IO_AF) UserIO_AF_Set(USER_TP_SCK_AF,USER_IO_AF)

class sharp_spi_iic.SPI

基类:object

spi类

  • 参数
    • kwargs 可变参数

  • 返回
    • adapter 设备类

  • 说 明 :id(id号 必须要传 硬件spi–1,软件spi–0,1.配置硬件SPI时,模式配置完之后还需要把引脚配成复用。2.软件SPI只实现了4线模式)

    mode(SPI模式 3–三线SPI 4–四线SPI 5–DSPI 6–QSPI 默认说4线SPI 必须要传) baudrate(分频值 主频是50M分频 默认10–5M 必须要传) polarity(极性可以是 0 或 1,是时钟空闲时所处的电平。默认0 必须要传) phase (相位可以是 0 或 1,分别在第一个或者第二个时钟边缘采集数据。默认0 必须要传) bits (每次传输的数据长度,默认是 8 位。 可以不传) firstbit (传输数据从高位开始还是从低位开始 默认MSB 可以不传) sck (sck对象 对应IO口宏) 无论硬件还是软件 传了指定对象后,底层会自动初始化IO mosi (mosi对象 对应IO口宏) 无论硬件还是软件 传了指定对象后,底层会自动初始化IO miso (miso对象 对应IO口宏) 无论硬件还是软件 传了指定对象后,底层会自动初始化IO number(当前初始化spi的序列号) 默认为0 当需要初始化多组spi的时候需要赋值

  • 示例: 软件spi adapter = spi_init(id = 0,mode = 4,baudrate = 10,polarity = 1,phase = 1,sck = LCD_TP_SCK,mosi = LCD_TP_MOSI,miso = LCD_TP_MISO)

    硬件spi adapter = spi_init(id = 1,mode = 4,baudrate = 10,polarity = 1,phase = 1,sck = LCD_TP_SCK,mosi = LCD_TP_MOSI,miso = LCD_TP_MISO)

Read(length: int, dc=None)

接收一次数据

  • 参数
    • length :接收数据字节数

    • dc :dc位(9位的时候使用,8位可不传)

  • 返回 : 接收数据缓冲区

  • 示例Send_buf[0] = (addr & 0x00007F)

    Send_buf[1] = 0x00 send(Send_buf,2) pbuf = Read(length)

SPI_OnlyR = 2
SPI_OnlyW = 1
SPI_WR = 0
SPI_transfer(message, msgs_num)

自定义传输数据

  • 参数
    • message :消息类

    • msgs_num :连续处理包个数

  • 返回 : 无

  • 示例byte_buf = bytearray(5)

    message = spi_message() message.spi_type = SPI_OnlyW 类型 见第14行 message.spi_len = 5 message.RX_Buffer = byte_buf 有接收时候在传 byte类型数据 message.TX_Buffer = byte_buf 有发送的时候在传 SPI_transfer(adapter,message)

send(send_buf: bytearray, send_length: int, dc=None)

发送一次数据

  • 参数
    • send_buf :发送数据缓冲区(传得必须为字节对象)

    • send_length :发送数据字节数

    • dc :dc位(9位的时候使用,8位可不传)

  • 返回 : 无

  • 示例Send_buf = bytearray(5)

    Send_buf[0] = 0xFF Send_buf[1] = ((addr<<1) & 0xFF0000)>>16 Send_buf[2] = ((addr<<1) & 0x00FF00)>>8 send(Send_buf,3)

send_then_recv(send_buf: bytearray, send_length: int, recv_length: int, send_dc=None, recv_dc=None)

先发送后接收数据(中间片选不释放)

  • 参数
    • send_buf1 发送数据缓冲区 1

    • recv_length 接收数据缓冲区指针

    • send_length 发送数据缓冲区 数据字节数

    • send_dc :发送dc位(9位的时候使用,8位可不传)

    • recv_dc 接收dc位(9位的时候使用,8位可不传)

  • 返回 : 接收数据缓冲区

  • 示例Send_buf[0] = (addr & 0x00007F)

    Send_buf[1] = 0x00 pbuf = my_spi.send_then_recv(Send_buf,2,length) return pbuf

send_then_send(send_buf1: bytearray, send_length1: int, send_buf2: bytearray, send_length2: int, dc=None)

连续发送两次数据(中间片选不释放)

  • 参数
    • send_buf1 发送数据缓冲区 1

    • send_buf2 发送数据缓冲区 2

    • send_length1 发送数据缓冲区 1 数据字节数

    • send_length2 发送数据缓冲区 1 数据字节数

    • dc :dc位(9位的时候使用,8位可不传)

  • 返回 : 无

  • 示例Send_buf = bytearray(5)

    Send_buf[0] = 0xFF Send_buf[1] = ((addr<<1) & 0xFF0000)>>16 Send_buf[2] = ((addr<<1) & 0x00FF00)>>8 send_then_send(Send_buf,3,Send_buf,3)

class sharp_spi_iic.iic_message

基类:object

IIC 发送接收消息对象

IIC_Buffer()

IIC 接收发送缓冲区

iic_addr()

IIC 器件地址

iic_len()

IIC 消息长度

iic_type()

IIC 传输类型

class sharp_spi_iic.spi_message

基类:object

SPI 发送接收消息对象

RX_Buffer()

SPI 接收缓冲区

TX_Buffer()

SPI 发送缓冲区

spi_dc()

SPI DC使能位

spi_len()

SPI 传输的长度

spi_type()

SPI 传输类型