yangwenchao2000 发表于 2017-12-27 09:05:47

SPI单线双向与ILI9342通信,只能写不能读


采用STM32F373的SPI与ILI9342单线双向通信,可以往ILI9342写显示数据。由于用到了STemWin,从ILI9342读显示数据,应该是将数据传输方向由SPI_Direction_1Line_Tx设置为SPI_Direction_1Line_Rx就可以了。但是实测不成功,而且只要往ILI9342发送了0x2e指令(Memory Read),再往ILI9342发指令就无效。

Inc_brza 发表于 2017-12-27 16:03:26

单线双向,你还需要其他的线的,例如读使能、写使能,而不是master改成读就可以,建议放上
ili9342的数据手册,以及原理图截图供大家分析!

yangwenchao2000 发表于 2017-12-27 17:07:28

本帖最后由 yangwenchao2000 于 2017-12-27 17:08 编辑

Inc_brza 发表于 2017-12-27 16:03
单线双向,你还需要其他的线的,例如读使能、写使能,而不是master改成读就可以,建议放上
ili9342的数据手 ...
ILI9342配置为SPI4通信模式时,不需要读写使能。

yangwenchao2000 发表于 2018-1-3 15:30:42


接收数据之前将将数据传输方向由SPI_Direction_1Line_Tx设置为SPI_Direction_1Line_Rx,
数据接收完毕后,又将数据传输方向由SPI_Direction_1Line_Rx设置为SPI_Direction_1Line_Tx,
目前可以成功读取一个点的像素值。但是读取完毕后就不能向ILI9342写数据。

yangwenchao2000 发表于 2018-1-5 09:51:36

ILI9342的数据手册上给出了4线SPI模式下18bit时读出数据的格式。但是没有给出16bit时读出数据的格式。尝试过如下图所示的两种方式,当SPI波特率设置为36MHz时,方式一可以正确读出一次RAM内的显示数据,当SPI波特率设置为18MHz及以上时,通过方式二可正确读出RAM内的数据。但是由于读数据时发送了0X2E(Read memory RAM command),后续向ILI9342发送指令、数据无效,无法继续控制ILI9342。另外,ILI9342的数据手册中4-line SPI时序图中的Output Disable time 要求的范围是90ns-95ns。怎么会限制得这么死?

lzts 发表于 2018-3-28 08:24:11

12脚是/RD,读使能信号,你独立出来用一个IO控制试下,低电平读。

feixiang20 发表于 2018-3-28 09:15:53

直接设置成输入看看有没有读功能,只有一根线单向使然,感觉确实无法读操作

wenyangzeng 发表于 2018-3-28 09:44:50

yangwenchao2000 发表于 2018-1-3 15:30
接收数据之前将将数据传输方向由SPI_Direction_1Line_Tx设置为SPI_Direction_1Line_Rx,
数据接收完毕后, ...
根据楼主所述:
SPI_Direction_1Line_Tx设置为SPI_Direction_1Line_Rx,
数据接收完毕后,又将数据传输方向由SPI_Direction_1Line_Rx设置为SPI_Direction_1Line_Tx,
目前可以成功读取一个点的像素值。但是读取完毕后就不能向ILI9342写数据

貌似每次读完ILI9342后,ILI9342还处于TX模式,还要重新初始化ILI9342,让其回到RX模式。

无薪税绵 发表于 2018-3-28 11:29:06

ili9342的数据手册


4线制_SPI驱动ILI9341_16位数据宽度(正点原子实例_使用HAL库_内有详细解释)


这个不是16bit时读出数据的格式吗?


关于数据传输方向,ST手册提到:
SPI用双向单数据线模式时,
MOSI管脚配置成“AF-PP”是可以的,
清除BIDIOE切换到输入模式时,
SPI会自动把这个管脚切换到输入模式。

楼主可以试试看。

x5y4z3 发表于 2018-3-29 11:04:04

解释得挺详细的,在此又学到了不少。
页: [1]
查看完整版本: SPI单线双向与ILI9342通信,只能写不能读