diff --git a/docs/Quick_start/zh/media/Quectel_sbs_Socket_course.png b/docs/Quick_start/zh/media/Quectel_sbs_Socket_course.png new file mode 100644 index 0000000000000000000000000000000000000000..45647602d435c7f31e6f6431ee862bad7f76fea9 Binary files /dev/null and b/docs/Quick_start/zh/media/Quectel_sbs_Socket_course.png differ diff --git a/docs/Quick_start/zh/media/Quectel_sbs_Socket_relation.png b/docs/Quick_start/zh/media/Quectel_sbs_Socket_relation.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffe2a127ce0932449577fccf47b65099faeefdf Binary files /dev/null and b/docs/Quick_start/zh/media/Quectel_sbs_Socket_relation.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_1.png b/docs/Quick_start/zh/media/sbs_json_picture_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd67d6d5297fa1639abcc81a6ddaccfffef1c21 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_1.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_10.png b/docs/Quick_start/zh/media/sbs_json_picture_10.png new file mode 100644 index 0000000000000000000000000000000000000000..5604133ef3352c61a0b968dcee9761f2f7e7bc3a Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_10.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_2.png b/docs/Quick_start/zh/media/sbs_json_picture_2.png new file mode 100644 index 0000000000000000000000000000000000000000..df317173c3f1a7dad03f2d9d2a2da169a9840d77 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_2.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_3.png b/docs/Quick_start/zh/media/sbs_json_picture_3.png new file mode 100644 index 0000000000000000000000000000000000000000..57e26aa96a7ee1b5f5b09314c6e2aed86f74fbba Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_3.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_4.png b/docs/Quick_start/zh/media/sbs_json_picture_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9098be763e2becd22055e2f9cfb3099b647070c4 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_4.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_5.png b/docs/Quick_start/zh/media/sbs_json_picture_5.png new file mode 100644 index 0000000000000000000000000000000000000000..12f9622180d5321748f1e4d4fc5dcfd21e5e625d Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_5.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_6.png b/docs/Quick_start/zh/media/sbs_json_picture_6.png new file mode 100644 index 0000000000000000000000000000000000000000..0df2069766be663bc7105bbe46d663ebc4b5b0ad Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_6.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_7.png b/docs/Quick_start/zh/media/sbs_json_picture_7.png new file mode 100644 index 0000000000000000000000000000000000000000..adb7828fa58fbedb678265e452059fb840cf6fc2 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_7.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_8.png b/docs/Quick_start/zh/media/sbs_json_picture_8.png new file mode 100644 index 0000000000000000000000000000000000000000..6968b04a40787be856b302874a2f724b1c75cd76 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_8.png differ diff --git a/docs/Quick_start/zh/media/sbs_json_picture_9.png b/docs/Quick_start/zh/media/sbs_json_picture_9.png new file mode 100644 index 0000000000000000000000000000000000000000..afb5724c7278216072d58b405bfff446b853c1d9 Binary files /dev/null and b/docs/Quick_start/zh/media/sbs_json_picture_9.png differ diff --git a/docs/sbs/zh/BSP/SPI.md b/docs/sbs/zh/BSP/SPI.md index 892175b14df6406f978276d7d2bfd3c2733c4b93..94294f8ef0b4b4041f6ebcb318085a7f215a0369 100644 --- a/docs/sbs/zh/BSP/SPI.md +++ b/docs/sbs/zh/BSP/SPI.md @@ -1,91 +1,107 @@ # QuecPython SPI总线开发 -## API简介 +## 修订历史 -本文以EC600S-CN模块为例,主要介绍QuecPython machine模块中SPI的使用。该模块包含的API有: +| 版本 | 日期 | 作者 | 变更表述 | +| ---- | ---------- | ---- | -------- | +| 1.0 | 2021-09-14 | Grey | 初版 | -- **machine.SPI(port, mode, clk)** +文档主要基于EC600x(包括EC600S、EC600N、EC600U)介绍如何使用 QuecPython_SPI 功能,通过本文你将了解到 EC600x_SPI 的参数设置及使用方法。 -- **SPI.wtite(data,datalen)** +有关API详解请参考 [QuecPython-machine - spi](https://python.quectel.com/wiki/#/zh-cn/api/QuecPythonClasslib?id=spi) -- **SPI.read(data,datalen)** -- **SPI.write_read(r_data,data, datalen)** - +## SPI 简介 -具体的API 详解请参考[QuecPython-machine - spi](https://python.quectel.com/wiki/api/#spi) +SPI,是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 -## SPI简介 -SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 +### 主-从模式(Master-Slave) +SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)。一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备,SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备,Slave 设备本身不能产生或控制 Clock,没有 Clock 则 Slave 设备不能正常工作。 -## SPI特点 +![media_SPI_1](media/media_SPI_1.jpg) -### 采用主-从模式(Master-Slave) 的控制方式 -SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave). 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作 +### 同步方式(Synchronous) +Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse),时钟脉冲组成了时钟信号(Clock Signal),时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样,来保证数据在两个设备之间是同步传输的。 -### 采用同步方式(Synchronous)传输数据 +![media_SPI_2](media/media_SPI_2.jpg) -Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的. -![](media\SPI_1.jpg) -### 数据交换(Data Exchanges) +### 四种通信模式 + +**时钟极性 CPOL** 是指 SPI 通讯设备处于空闲状态时,SCK 信号线的电平信号(即 SPI 通讯开始前、 NSS 线为高电平时 SCK 的状态)。 CPOL=0 时, SCK 在空闲状态时为低电平,CPOL=1 时,则相反。 + + **时钟相位 CPHA** 是指数据的采样的时刻,当 CPHA=0 时, MOSI 或 MISO 数据线上的信号将会在 SCK 时钟线的“奇数边沿” 被采样。当 CPHA=1 时,数据线在 SCK 的“偶数边沿” 采样。 -​ SPI 设备间的数据传输之所以又被称为数据交换, 是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)". 在每个 Clock 周期内, SPI 设备都会发送并接收一个 bit 大小的数据, 相当于该设备有一个 bit 大小的数据被交换了. 一个 Slave 设备要想能够接收到 Master 发过来的控制信号, 必须在此之前能够被 Master 设备进行访问 (Access). 所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选, 把想要访问的 Slave 设备选上. 在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致 SPI 物理模块最终失效. 因此, 在程序中一般都会在 SPI 传输完数据后, 去读取 SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的。 +根据 **时钟极性 CPOL** 与 **时钟相位 CPHA** 的不同,SPI具有四种通信模式。 -### SPI有四种传输模式 +![media_SPI_3](media/media_SPI_3.jpg) -上升沿、下降沿、前沿、后沿触发。当然也有MSB和LSB传输方式. +![media_SPI_4](media/media_SPI_4.jpg) -![](media\spi_2.jpg) +![media_SPI_5](media/media_SPI_5.jpg) -### SPI只有主模式和从模式之分。 +### 数据交换(Data Exchanges) + +SPI 设备间的数据传输之所以又被称为数据交换,是因为 SPI 协议规定一个 SPI 设备不能在数据通信过程中仅仅只充当一个 "发送者(Transmitter)" 或者 "接收者(Receiver)"。在每个 Clock 周期内,SPI 设备都会发送并接收一个 bit 大小的数据,相当于该设备有一个 bit 大小的数据被交换了。 -没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。 +一个 Slave 设备要想能够接收到 Master 发过来的控制信号,必须在此之前能够被 Master 设备进行访问 (Access)。所以, Master 设备必须首先通过 SS/CS pin 对 Slave 设备进行片选,把想要访问的 Slave 设备选上,在数据传输的过程中,每次接收到的数据必须在下一次数据传输之前被采样。如果之前接收到的数据没有被读取,那么这些已经接收完成的数据将有可能会被丢弃,导致 SPI 物理模块最终失效。因此,在程序中一般都会在 SPI 传输完数据后,去读取 SPI 设备里的数据,即使这些数据(Dummy Data)在我们的程序里是无用的。 +SPI只有主模式和从模式之分,没有读和写的说法。因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。 +## SPI通信 -## 使用SPI进行通信 +### 实验代码 -本文所示代码使用的硬件版本为 EC600S-CN V1.1。 +以下代码适合EC600x 开发板进行 SPI 自发自收通信测试。**实验前提:短接 SPI_MISO 与 SPI_MOSI 引脚**。 ```python # -*- coding: UTF-8 -*- - -from machine import SPI import utime +from machine import SPI +from machine import Pin + +# 屏蔽GNSS模块数据干扰. 由于EC600S/N的SPI_MISO与SPI_MOSI引脚还被复用为UART1. 开发板还连接GNSS模块L76K, 为了断开L76K吐数据对SPI通信的干扰, 需要添加下面两句代码. +gpio11 = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 0) # EC600S/EC600N使用 +gpio11.write(0) # EC600S/EC600N使用 + +w_data = "Grey" +r_data = bytearray(len(w_data)) +count = 10 # 运行次数 + +# 以下代码根据模块型号进行选择. +spi_obj = SPI(1, 0, 1) # EC600S/N使用 +# spi_obj = SPI(0, 0, 1) # EC600U使用 + +while count: + count -= 1 + utime.sleep(1) + ret = spi_obj.write_read(r_data, w_data, 100) + if ret == -1: + SPI_msg = "SPIReadError" + else: + SPI_msg = "SPIRead:{} running:{:0>2d}".format(r_data, count) + print(SPI_msg) +``` -def spi_test(): - spi_obj = SPI(1, 0, 1) - r_data = bytearray(5) - data = b"world" - # print(data) - ret = spi_obj.write_read(r_data, data, 5) - if ret is None: - print('----------', ret) - print('#########', r_data) -if __name__ == '__main__': - while True: - spi_test() - utime.sleep(1) +### 实验现象 -``` +![media_SPI_6](media/media_SPI_6.jpg) ## 配套代码 - - - 下载代码 \ No newline at end of file + + 下载代码 \ No newline at end of file diff --git a/docs/sbs/zh/BSP/code/media_SPI.py b/docs/sbs/zh/BSP/code/media_SPI.py new file mode 100644 index 0000000000000000000000000000000000000000..2eaef63c7a2a226912adb82b4a8cbf3113c415ea --- /dev/null +++ b/docs/sbs/zh/BSP/code/media_SPI.py @@ -0,0 +1,24 @@ +# -*- coding: UTF-8 -*- +import utime +from machine import SPI +from machine import Pin + +# 屏蔽GNSS模块数据干扰. 由于EC600S/N的SPI_MISO与SPI_MOSI引脚还被复用为UART1. 开发板还连接GNSS模块L76K, 为了断开L76K吐数据对SPI通信的干扰, 需要添加下面两句代码. +gpio11 = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 0) # EC600S/EC600N使用 +gpio11.write(0) # EC600S/EC600N使用 + +w_data = "Grey" +r_data = bytearray(len(w_data)) +count = 10 # 运行次数 +spi_obj = SPI(1, 0, 1) # EC600S/EC600N使用 +# spi_obj = SPI(0, 0, 1) # EC600U/EC100Y使用 + +while count: + count -= 1 + utime.sleep(1) + ret = spi_obj.write_read(r_data, w_data, 100) + if ret == -1: + SPI_msg = "SPIReadError" + else: + SPI_msg = "SPIRead:{} running:{:0>2d}".format(r_data, count) + print(SPI_msg) diff --git a/docs/sbs/zh/BSP/code/spi_base.py b/docs/sbs/zh/BSP/code/spi_base.py deleted file mode 100644 index 21697f1833578d60ee787b4ce1ac58b0eb91e25c..0000000000000000000000000000000000000000 --- a/docs/sbs/zh/BSP/code/spi_base.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: UTF-8 -*- - -from machine import SPI -import utime - -def spi_test(): - spi_obj = SPI(1, 0, 1) - r_data = bytearray(5) - data = b"world" - # print(data) - ret = spi_obj.write_read(r_data, data, 5) - if ret is None: - print('----------', ret) - print('#########', r_data) - - -if __name__ == '__main__': - while True: - spi_test() - utime.sleep(1) diff --git a/docs/sbs/zh/BSP/media/SPI_1.jpg b/docs/sbs/zh/BSP/media/SPI_1.jpg deleted file mode 100644 index 8e8d1fbd0be4a7eba14f60eb04e176c73acc4e30..0000000000000000000000000000000000000000 Binary files a/docs/sbs/zh/BSP/media/SPI_1.jpg and /dev/null differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_1.jpg b/docs/sbs/zh/BSP/media/media_SPI_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9e636fa9fc329c164c2e2f42f31795b5c61abaf Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_1.jpg differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_2.jpg b/docs/sbs/zh/BSP/media/media_SPI_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ac14f0715250687e91e68bf13d5b98b4efac075 Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_2.jpg differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_3.jpg b/docs/sbs/zh/BSP/media/media_SPI_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf87c486c4832c74f3d20170f7cd64faf10d774a Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_3.jpg differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_4.jpg b/docs/sbs/zh/BSP/media/media_SPI_4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66b9a7b203f332146efb947dc5c550a98c413dd5 Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_4.jpg differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_5.jpg b/docs/sbs/zh/BSP/media/media_SPI_5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88c9a0922849681691935bf954f22daf1123b45e Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_5.jpg differ diff --git a/docs/sbs/zh/BSP/media/media_SPI_6.jpg b/docs/sbs/zh/BSP/media/media_SPI_6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a41d5f821b017388e145b87efddbe0a9759f3619 Binary files /dev/null and b/docs/sbs/zh/BSP/media/media_SPI_6.jpg differ diff --git a/docs/sbs/zh/BSP/media/spi_2.jpg b/docs/sbs/zh/BSP/media/spi_2.jpg deleted file mode 100644 index c539d8fbd899972406bbb10ed4816d6415094d1b..0000000000000000000000000000000000000000 Binary files a/docs/sbs/zh/BSP/media/spi_2.jpg and /dev/null differ