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
基类:
objectIIC模块类
- 参数
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_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
基类:
objectspi类
- 参数
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_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)