diff --git "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/math.md" "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/math.md" index 61e22885ef0a56830395b55295764d4ea3029a12..1352ddca631d46bd1319a6c71b79fa531cfc536b 100644 --- "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/math.md" +++ "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/math.md" @@ -14,8 +14,8 @@ math.pow(x, y) **参数描述** -* `x`:浮点数 -* `y`:浮点数 +* `x`:任意实数类型 +* `y`:任意实数类型 **返回值描述** 浮点数:`x`的 `y`次方 @@ -40,7 +40,7 @@ math.acos(x) **参数描述** -* `x`:浮点数,是-1~1之间的数,包括-1和1,如果小于-1或者大于1,会产生错误。 +* `x`:任意实数类型,是-1~1之间的数,包括-1和1,如果小于-1或者大于1,会产生错误。 **返回值描述** 浮点数:`x`的反余弦弧度值 @@ -65,7 +65,7 @@ math.asin(x) **参数描述** -* `x`:浮点数,是-1~1之间的数,包括-1和1,如果小于-1或者大于1,会产生错误。 +* `x`:任意实数类型,是-1~1之间的数,包括-1和1,如果小于-1或者大于1,会产生错误。 **返回值描述** 浮点数:`x`的反正弦弧度值 @@ -90,7 +90,7 @@ math.atan(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** 浮点数:`x`的反正切弧度值 @@ -117,8 +117,8 @@ math.atan2(x, y) **参数描述** -* `x`:浮点数 -* `y`:浮点数 +* `x`:任意实数类型 +* `y`:任意实数类型 **返回值描述** 浮点数:坐标 (`x` ,`y`)的反正切值 @@ -145,10 +145,10 @@ math.ceil(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** -整数:`x`的上入整数 +整数:`x`:大于等于入参的最小整数 **示例:** @@ -170,8 +170,8 @@ math.copysign(x, y) **参数描述** -* `x`:浮点数 -* `y`:浮点数 +* `x`:任意实数类型 +* `y`:任意实数类型 **返回值描述** 浮点数,把 `y`的正负号加到 `x`前面 @@ -200,7 +200,7 @@ math.cos(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** 浮点数,`x`的弧度的余弦值,范围-1~1之间 @@ -225,7 +225,7 @@ math.degrees(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** 浮点数,弧度 `x`转换为角度 @@ -258,7 +258,7 @@ math.exp(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** 浮点数,`e`的 `x`次幂 @@ -285,7 +285,7 @@ math.fabs(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** 浮点数,`x`的绝对值 @@ -310,10 +310,10 @@ math.floor(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** -浮点数,`x`的下舍整数 +整数,`x`:小于等于入参的最大整数 **示例:** @@ -339,8 +339,8 @@ math.fmod(x, y) **参数描述** -* `x`:浮点数 -* `y`:浮点数 +* `x`:任意实数类型 +* `y`:任意实数类型 **返回值描述** `x`/`y`的余数,浮点数 @@ -366,7 +366,7 @@ math.modf(x) **参数描述** -* `x`:浮点数 +* `x`:任意实数类型 **返回值描述** `x`/`y`的余数,浮点数 @@ -380,10 +380,10 @@ math.modf(x) ## 返回一个元组(m,e) -### `math.modf` +### `math.frexp` ```python -math.modf(x) +math.frexp(x) ``` 返回一个元组(m,e) @@ -414,7 +414,7 @@ math.isfinite(x) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -440,7 +440,7 @@ math.isinf(x) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -462,15 +462,15 @@ False pymath.isnan(x) ``` -判断是否数字 +判断是否非数字(NaN) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** -如果 `x`不是数字,返回 `True`,否则返回 `False`。 +如果 `x`为非数字,返回 `True`,否则返回 `False`。 **示例:** @@ -492,7 +492,7 @@ math.ldexp(x, exp) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -518,7 +518,7 @@ math.log(x) **参数描述** -* `x`,浮点数,小于0会报错 +* `x`,任意实数类型,小于0会报错 **返回值描述** @@ -550,7 +550,7 @@ math.radians(x) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -600,11 +600,11 @@ math.sin(x) math.sqrt(x) ``` -返回x弧度的平方根 +返回x的平方根 **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -632,7 +632,7 @@ math.tan(x) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** @@ -658,7 +658,7 @@ math.trunc(x) **参数描述** -* `x`,浮点数 +* `x`,任意实数类型 **返回值描述** diff --git "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/sys.md" "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/sys.md" index bca15578f5e75a7b1eeed9520fa3025939899887..0ca52e50634aecf7f9f0bb8d913e26aa15905250 100644 --- "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/sys.md" +++ "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/sys.md" @@ -34,7 +34,7 @@ except ImportError: ### `sys.modules` -已载入模块的字典。 +以字典形式返回当前Python环境中已经导入的模块。 ### `sys.platform` @@ -50,11 +50,11 @@ MicroPython运行的平台。 ### `sys.version` -MicroPython 语言版本,字符串格式。 +MicroPython 版本,字符串格式。 ### `sys.version_info` -MicroPython 语言版本,整数元组格式。 +MicroPython 版本,整数元组格式。 ## **方法** diff --git "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/uos.md" "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/uos.md" index 04e470797c9814de24f3fdf25afc3e890519be03..24e38fc5b38658ea07116be7262f244158b5da36 100644 --- "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/uos.md" +++ "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/uos.md" @@ -1,6 +1,6 @@ # uos - 基本系统服务 -`uos`模块包含文件系统访问和挂载构建,该模块实现了CPython模块相应模块的子集。更多信息请参阅阅CPython文档:[os](https://docs.python.org/3.5/library/os.html#module-os) +`uos`模块包含文件系统访问和挂载构建,该模块实现了CPython模块相应模块的子集。更多信息请参阅CPython文档:[os](https://docs.python.org/3.5/library/os.html#module-os) ## 删除文件 @@ -275,7 +275,7 @@ uos.uname2() 该接口与micropython官方接口返回值形式一致。注意与上面uos.uname()接口返回值的区别,返回值形式为: -`(sysname, nodename, release, version, machine, qpyver=)` +`(sysname, nodename, release, version, machine, qpyver)` * `sysname` – 底层系统的名称,string类型 * `nodename` – 网络名称(可以与 sysname 相同) ,string类型 @@ -304,11 +304,11 @@ uos.uname2() uos.urandom(n) ``` -返回具有*n个*随机字节的bytes对象,只要有可能,它就会由硬件随机数生成器生成。 +返回具有*n个*随机字节的bytes对象,如果模组搭载了硬件随机数生成器,它就会由硬件随机数生成器生成。 **参数描述** -* `n`,整形,随机字节的个数 +* `n`,整型,随机字节的个数 **返回值描述** @@ -337,11 +337,22 @@ uos.VfsFat(spi_port, spimode, spiclk, spics) **参数描述** * `spi_port`,int,通道选择[0,1] -* `spimode`,int,PI 的工作模式(模式0最常用):`
`0 : CPOL=0, CPHA=0 1 : CPOL=0, CPHA=12: CPOL=1, CPHA=0 3: CPOL=1, CPHA=1 +* `spimode`,int,PI 的工作模式(模式0最常用):
0 : CPOL=0, CPHA=0 1 : CPOL=0, CPHA=12: CPOL=1, CPHA=0 3: CPOL=1, CPHA=1 > 时钟极性CPOL: 即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平) -* `spiclk`, int, 时钟频率 0 : 812.5kHz 1 : 1.625MHz 2 : 3.25MHz 3 : 6.5MHz 4 : 13MHz +* `spiclk`, int + +|参数|时钟频率| +| ---- | ---- | +| 0 |812.5kHz| +| 1 |1.625MHz| +| 2 |3.25MHz| +| 3 |6.5MHz| +| 4 |13MHz| + + 0 : 812.5kHz 1 : 1.625MHz 2 : 3.25MHz 3 : 6.5MHz 4 : 13MHz + * `spics`,int,指定CS片选引脚为任意GPIO,硬件CS可以接这里指定的脚,也可以接默认的SPI CS脚 > 1-n:指定Pin.GPIO1-Pin.GPIOn为CS脚 @@ -402,8 +413,8 @@ uos.set_det(vfs_obj.GPIOn,mode) **参数描述** -* `vfs_obj.GPIOn`,int类型,用于sd卡插拔卡检测的GPIO引脚号,参照Pin模块的定义 -* `mode`,int类型 `
0`:sd卡插上后,检测口为低电平;sd卡取出后,检测口为高电平 `
1`:sd卡插上后,检测口为高电平;sd卡取出后,检测口为低电平 +* `vfs_obj.GPIOn`,int类型,用于sd卡插拔卡检测的GPIO引脚号,参照[Pin](../QuecPython类库/machine.Pin.md)模块的定义 +* `mode`,int类型
0:sd卡插上后,检测口为低电平;sd卡取出后,检测口为高电平
1:sd卡插上后,检测口为高电平;sd卡取出后,检测口为低电平 **返回值描述** @@ -484,12 +495,12 @@ uos.VfsLfs1(readsize,progsize,lookahead,pname,spi_port,spi_clk) **参数描述** -* readsize,int类型,预留,暂未使用 -* progsize,int类型,预留,暂未使用 -* lookahead,int类型,预留,暂未使用 -* pname,str类型,固定为“ext_fs”。后续扩展 -* spi_port,int类型,支持的端口参照SPI章节说明 -* spi_clk,int类型 `
`时钟频率:`
`0:6.25M 1:12.5M 2:25M 3:50M 4:3.125M 5:1.5625M 6:781.25K +* `readsize`,int类型,预留,暂未使用 +* `progsize`,int类型,预留,暂未使用 +* `lookahead`,int类型,预留,暂未使用 +* `pname`,str类型,固定为“ext_fs”。后续扩展 +* `spi_port`,int类型,支持的端口参照SPI章节说明 +* `spi_clk`,int类型
时钟频率:
0:6.25M 1:12.5M 2:25M 3:50M 4:3.125M 5:1.5625M 6:781.25K **返回值描述** @@ -524,8 +535,8 @@ uos.mount(vfs_obj, path) **参数描述** -* vfs_obj,vfs object,文件系统对象 -* path,str类型,文件系统的根目录 +* `vfs_obj`,vfs object,文件系统对象 +* `path`,str类型,文件系统的根目录 **示例:** diff --git "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/urandom.md" "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/urandom.md" index f6c3ba72be82b2c47cc5b89d810d7b9e70bb317a..ff35609e224fd6361402025a6df0531a3ef79265 100644 --- "a/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/urandom.md" +++ "b/docs/API_reference/zh/QuecPython\346\240\207\345\207\206\345\272\223/urandom.md" @@ -151,7 +151,7 @@ urandom.seed(sed) **参数描述** -* `sed`,int类型,区间最小值 +* `sed`,int类型 **示例**: @@ -193,7 +193,7 @@ urandom.uniform(start, end) **返回值描述** -浮点数类型,在 `start `到 `end` 之间的随机整数 +浮点数类型,在 `start `到 `end` 之间的随机数 **示例**: diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/gnss.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/gnss.md" index 2170f82e26bc7bcc7ef4495f0534c49128d904c0..4f90045d368594a5a0e775d9df2741efd075481f 100644 --- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/gnss.md" +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/gnss.md" @@ -16,7 +16,7 @@ gnss.GnssGetData(uartn,baudrate,databits,parity,stopbits,flowctl) **参数描述** -* `uartn`,int类型 +* `UARTn`,int类型 UARTn范围为0-3: `0`-UART0 - DEBUG PORT `1`-UART1 – BT PORT @@ -28,8 +28,7 @@ gnss.GnssGetData(uartn,baudrate,databits,parity,stopbits,flowctl) * `stopbits`,int类型,停止位(1 ~ 2) * `flowctl`,int类型,硬件控制流(0 – FC_NONE, 1 – FC_HW) -**返回值描述** -gnss类的对象 +**返回值描述**
gnss类的对象 **示例** @@ -311,7 +310,8 @@ gnss.getCourse() 获取GNSS信息中携带的卫星方位角 **返回值描述** -返回所有可视的GNSS卫星方位角,范围:`0 ~ 359`,以正北为参考平面。返回形式为字典,其中key表示卫星编号,value表示方位角。要注意,value的值可能是一个整型值,也可能是"",这取决于原始的GNSS数据中GPGSV语句中方位角是否有值。返回值形式如下: + +返回所有可视的GNSS卫星方位角,范围:`0 ~ 359`,以正北为参考平面。返回形式为字典,其中key表示卫星编号,value表示方位角。要注意,value的值可能是一个整型值,也可能是空,这取决于原始的GNSS数据中GPGSV语句中方位角是否有值。返回值形式如下: `{key:value, ..., key:value}` diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/pm.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/pm.md" index d3f06f6e7149ce90f906bcbf0c997fc4d6301962..baa8f0d23f09d01ff98735bf16337fa43e75ff1b 100644 --- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/pm.md" +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/pm.md" @@ -2,6 +2,33 @@ 在无业务处理时使系统进入休眠状态,进入低功耗模式。 +**使用示例** + +模拟测试,实际开发请根据业务场景选择使用! + +```python +import pm +import utime + +# 创建wakelock锁 +lpm_fd = pm.create_wakelock("test_lock", len("test_lock")) +# 设置自动休眠模式 +pm.autosleep(1) + +# 模拟测试,实际开发请根据业务场景选择使用 +while 1: + utime.sleep(20) # 休眠 + res = pm.wakelock_lock(lpm_fd) + print("ql_lpm_idlelock_lock, g_c1_axi_fd = %d" %lpm_fd) + print("unlock sleep") + utime.sleep(20) + res = pm.wakelock_unlock(lpm_fd) + print(res) + print("ql_lpm_idlelock_unlock, g_c1_axi_fd = %d" % lpm_fd) + num = pm.get_wakelock_num() # 获取已创建锁的数量 + print(num) +``` + ## 创建wake_lock锁 ### `pm.create_wakelock` @@ -14,8 +41,8 @@ pm.create_wakelock(lock_name, name_size) **参数描述** -* `lock_name`,自定义lock名,string类型, -* `name_size`, lock_name的长度, int类型 +* `lock_name`,自定义lock名,string类型。 +* `name_size`, 可选参数,lock_name的长度, int类型。 **返回值描述** @@ -35,7 +62,7 @@ pm.delete_wakelock(lpm_fd) **参数描述** -* `lpm_fd`,需要删除的锁对应标识id,int类型 +* `lpm_fd`,需要删除的锁对应标识id,int类型。 **返回值描述** @@ -55,7 +82,7 @@ pm.wakelock_lock(lpm_fd) **参数描述** -* `lpm_fd`,需要执行加锁操作的wakelock标识id,int类型 +* `lpm_fd`,需要执行加锁操作的wakelock标识id,int类型。 **返回值描述** @@ -75,7 +102,7 @@ pm.wakelock_unlock(lpm_fd) **参数描述** -* `lpm_fd`,需要执行释放锁操作的wakelock标识id,int类型 +* `lpm_fd`,需要执行释放锁操作的wakelock标识id,int类型。 **返回值描述** @@ -95,7 +122,7 @@ pm.autosleep(sleep_flag) **参数描述** -* `sleep_flag`,`0`关闭自动休眠, `1`开启自动休眠,int类型 +* `sleep_flag`,`0`关闭自动休眠, `1`开启自动休眠,int类型。 **返回值描述** @@ -132,8 +159,8 @@ pm.set_psm_time(mode)# 单独设置启用或禁用 <模式2> * `mode`,是否启用PSM,int类型: `0 `禁用PSM `1 `启用PSM - `2 `(仅BC25平台)禁用PSM并删除PSM的所有参数,如有默认值,则重置默认值。(注意此种模式禁用的情况下,如果要启用PSM必须用**模式1**,用**模式2**没有任何的意义,因为设置的TAU和ACT时间全部清零了)。 -* `tau_uint`,tau(T3412)定时器单位,int类型 + `2 `(仅BC25平台)禁用PSM并删除PSM的所有参数,如有默认值,则重置默认值。(注意此种模式禁用的情况下,如果要启用PSM必须用**模式1**,用**模式2**没有任何的意义,因为设置的TAU和ACT时间全部清零了。) +* `tau_uint`,tau(T3412)定时器单位,int类型。 | tau定时器单位值 | 类型 | 单位值说明 | | --------------- | ---- | ------------ | @@ -146,8 +173,8 @@ pm.set_psm_time(mode)# 单独设置启用或禁用 <模式2> | 6 | int | 320 小时 | | 7 | int | 定时器被停用 | -* `tau_time`,tau(T3412)定时器时间周期值,int类型 -* `act_uint`,act(T3324)定时器单位,int类型 +* `tau_time`,tau(T3412)定时器时间周期值,int类型。 +* `act_uint`,act(T3324)定时器单位,int类型。 | act定时器单位值 | 类型 | 单位值说明 | | --------------- | ---- | ------------ | @@ -156,7 +183,7 @@ pm.set_psm_time(mode)# 单独设置启用或禁用 <模式2> | 2 | int | 6 分钟 | | 7 | int | 定时器被停用 | -* `act_time`,act(T3324)定时器时间周期值,int类型 +* `act_time`,act(T3324)定时器时间周期值,int类型。 > **注意:**实际设置的tau和act,为单位值和周期值的积 @@ -210,29 +237,3 @@ pm.get_psm_time() > **注意**:仅BC25/ECX00U/ECX00E平台支持 -**使用示例** - -模拟测试,实际开发请根据业务场景选择使用! - -```python -import pm -import utime - -# 创建wakelock锁 -lpm_fd = pm.create_wakelock("test_lock", len("test_lock")) -# 设置自动休眠模式 -pm.autosleep(1) - -# 模拟测试,实际开发请根据业务场景选择使用 -while 1: - utime.sleep(20) # 休眠 - res = pm.wakelock_lock(lpm_fd) - print("ql_lpm_idlelock_lock, g_c1_axi_fd = %d" %lpm_fd) - print("unlock sleep") - utime.sleep(20) - res = pm.wakelock_unlock(lpm_fd) - print(res) - print("ql_lpm_idlelock_unlock, g_c1_axi_fd = %d" % lpm_fd) - num = pm.get_wakelock_num() # 获取已创建锁的数量 - print(num) -``` diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/quecgnss.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/quecgnss.md" index a404cc66bb6dd771152228f32c45ce7d54cd3b73..6495a78b906be26ac1a0b4a748d79e8c7a160b6d 100644 --- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/quecgnss.md" +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/quecgnss.md" @@ -4,6 +4,71 @@ > **说明**:当前仅 EC200UCNAA/EC200UCNLA/EC200UEUAA/EC800MCNGA/EC800GCNGA 型号支持该功能。 +**使用示例** + +```python +import quecgnss + + +def main(): + ret = quecgnss.init() + if ret == 0: + print('GNSS init ok.') + else: + print('GNSS init failed.') + return -1 + data = quecgnss.read(4096) + print(data[1].decode()) + + quecgnss.gnssEnable(0) + + +if __name__ == '__main__': + main() + + +#=================================================================================================== +#运行结果 +167,169,170,,,,,,,,1.773,1.013,1.455*15 +$GPGSV,2,1,8,3,23,303,34,16,32,219,28,22,74,98,26,25,16,43,25*77 +$GPGSV,2,2,8,26,70,236,28,31,59,12,38,32,55,127,34,4,5,,21*49 +$BDGSV,2,1,8,163,51,192,32,166,70,11,31,167,52,197,32,169,59,334,31*61 +$BDGSV,2,2,8,170,40,205,31,161,5,,31,164,5,,27,165,5,,29*59 +$GNRMC,022326.000,A,3149.324624,N,11706.921702,E,0.000,261.541,180222,,E,A*38 +$GNGGA,022326.000,3149.324624,N,11706.921702,E,1,12,1.013,-8.580,M,0,M,,*47 +$GNGLL,3149.324624,N,11706.921702,E,022326.000,A,A*44 +$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.773,1.013,1.455*1C +$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.773,1.013,1.455*15 +$GPGSV,2,1,8,3,23,303,34,16,32,219,27,22,74,98,26,25,16,43,25*78 +$GPGSV,2,2,8,26,70,236,28,31,59,12,37,32,55,127,34,4,5,,20*47 +$BDGSV,2,1,8,163,51,192,32,166,70,11,31,167,52,197,32,169,59,334,31*61 +$BDGSV,2,2,8,170,40,205,31,161,5,,31,164,5,,27,165,5,,29*59 +$GNRMC,022327.000,A,3149.324611,N,11706.921713,E,0.000,261.541,180222,,E,A*3F +$GNGGA,022327.000,3149.324611,N,11706.921713,E,1,12,1.013,-8.577,M,0,M,,*48 +$GNGLL,3149.324611,N,11706.921713,E,022327.000,A,A*43 +...... # 数据较多,省略 +$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.456*11 +$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.456*18 +$GPGSV,2,1,8,3,23,302,27,16,32,220,26,22,73,101,27,25,16,43,27*45 +$GPGSV,2,2,8,26,70,237,28,31,59,13,33,32,54,128,28,4,5,,24*44 +$BDGSV,2,1,8,163,51,192,33,166,71,11,35,167,52,198,33,169,59,334,34*6E +$BDGSV,2,2,8,170,40,205,32,161,5,,33,164,5,,28,165,5,,30*5F +$GNRMC,022507.000,A,3149.324768,N,11706.922344,E,0.000,261.541,180222,,E,A*31 +$GNGGA,022507.000,3149.324768,N,11706.922344,E,1,12,1.120,-8.794,M,0,M,,*48 +$GNGLL,3149.324768,N,11706.922344,E,022507.000,A,A*4D +$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.455*12 +$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.455*1B +$GPGSV,2,1,8,3,23,302,26,16,32,220,26,22,73,101,27,25,16,43,26*45 +$GPGSV,2,2,8,26,70,237,28,31,59,13,32,32,54,128,28,4,5,,24*45 +$BDGSV,2,1,8,163,51,192,24,166,71,11,35,167,52,198,33,169,59,334,34*68 +$BDGSV,2,2,8,170,40,205,31,161,5,,33,164,5,,28,165,5,,30*5C +$GNRMC,022508.000,A,3149.324754,N,11706.922338,E,0.002,261.541,180222,,E,A*38 +$GNGGA,022508.000,3149.324754,N,11706.922338,E,1,12,1.120,-8.750,M,0,M,,*4B +$GNGLL,3149.324754,N,11706.922338,E,022508.000,A,A*46 +$GNGSA,A,3,31,3 +``` + + ## GNSS 功能初始化 ### **`quecgnss.init`** @@ -15,7 +80,7 @@ quecgnss.init() 模组内置GNSS模块功能的初始化。 **返回值描述** -成功返回整形`0`,失败返回整形`-1`。 +成功返回整型`0`,失败返回整型`-1`。 ## GNSS 工作状态获取 @@ -55,7 +120,7 @@ quecgnss.gnssEnable(opt) **返回值描述** -成功返回整形 `0`,失败返回整形 `-1`。 +成功返回整型 `0`,失败返回整型 `-1`。 ## GNSS定位数据获取 @@ -73,71 +138,7 @@ quecgnss.read(size) **返回值描述** -成功返回一个元组,失败返回整形-1。元组形式如下: +成功返回一个元组,失败返回整型-1。元组形式如下: `(size, data)` `size` - 实际读取数据的大小 -`data` - GNSS定位数据 - -**GNSS使用示例** - -```python -import quecgnss - - -def main(): - ret = quecgnss.init() - if ret == 0: - print('GNSS init ok.') - else: - print('GNSS init failed.') - return -1 - data = quecgnss.read(4096) - print(data[1].decode()) - - quecgnss.gnssEnable(0) - - -if __name__ == '__main__': - main() - - -#=================================================================================================== -#运行结果 -167,169,170,,,,,,,,1.773,1.013,1.455*15 -$GPGSV,2,1,8,3,23,303,34,16,32,219,28,22,74,98,26,25,16,43,25*77 -$GPGSV,2,2,8,26,70,236,28,31,59,12,38,32,55,127,34,4,5,,21*49 -$BDGSV,2,1,8,163,51,192,32,166,70,11,31,167,52,197,32,169,59,334,31*61 -$BDGSV,2,2,8,170,40,205,31,161,5,,31,164,5,,27,165,5,,29*59 -$GNRMC,022326.000,A,3149.324624,N,11706.921702,E,0.000,261.541,180222,,E,A*38 -$GNGGA,022326.000,3149.324624,N,11706.921702,E,1,12,1.013,-8.580,M,0,M,,*47 -$GNGLL,3149.324624,N,11706.921702,E,022326.000,A,A*44 -$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.773,1.013,1.455*1C -$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.773,1.013,1.455*15 -$GPGSV,2,1,8,3,23,303,34,16,32,219,27,22,74,98,26,25,16,43,25*78 -$GPGSV,2,2,8,26,70,236,28,31,59,12,37,32,55,127,34,4,5,,20*47 -$BDGSV,2,1,8,163,51,192,32,166,70,11,31,167,52,197,32,169,59,334,31*61 -$BDGSV,2,2,8,170,40,205,31,161,5,,31,164,5,,27,165,5,,29*59 -$GNRMC,022327.000,A,3149.324611,N,11706.921713,E,0.000,261.541,180222,,E,A*3F -$GNGGA,022327.000,3149.324611,N,11706.921713,E,1,12,1.013,-8.577,M,0,M,,*48 -$GNGLL,3149.324611,N,11706.921713,E,022327.000,A,A*43 -...... # 数据较多,省略 -$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.456*11 -$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.456*18 -$GPGSV,2,1,8,3,23,302,27,16,32,220,26,22,73,101,27,25,16,43,27*45 -$GPGSV,2,2,8,26,70,237,28,31,59,13,33,32,54,128,28,4,5,,24*44 -$BDGSV,2,1,8,163,51,192,33,166,71,11,35,167,52,198,33,169,59,334,34*6E -$BDGSV,2,2,8,170,40,205,32,161,5,,33,164,5,,28,165,5,,30*5F -$GNRMC,022507.000,A,3149.324768,N,11706.922344,E,0.000,261.541,180222,,E,A*31 -$GNGGA,022507.000,3149.324768,N,11706.922344,E,1,12,1.120,-8.794,M,0,M,,*48 -$GNGLL,3149.324768,N,11706.922344,E,022507.000,A,A*4D -$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.455*12 -$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.455*1B -$GPGSV,2,1,8,3,23,302,26,16,32,220,26,22,73,101,27,25,16,43,26*45 -$GPGSV,2,2,8,26,70,237,28,31,59,13,32,32,54,128,28,4,5,,24*45 -$BDGSV,2,1,8,163,51,192,24,166,71,11,35,167,52,198,33,169,59,334,34*68 -$BDGSV,2,2,8,170,40,205,31,161,5,,33,164,5,,28,165,5,,30*5C -$GNRMC,022508.000,A,3149.324754,N,11706.922338,E,0.002,261.541,180222,,E,A*38 -$GNGGA,022508.000,3149.324754,N,11706.922338,E,1,12,1.120,-8.750,M,0,M,,*4B -$GNGLL,3149.324754,N,11706.922338,E,022508.000,A,A*46 -$GNGSA,A,3,31,3 -``` +`data` - GNSS定位数据 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/securedata.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/securedata.md" index 167cc42adca7cdc501a10150fb73c51816a76f08..df75ed306cb6e3233f784af258803b705d07d3c4 100644 --- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/securedata.md" +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/securedata.md" @@ -2,8 +2,26 @@ 模组提供一块裸flash区域及专门的读写接口供客户存贮重要信息,且信息在烧录固件后不丢失(烧录不包含此功能的固件无法保证不丢失)。提供一个存储和读取接口,不提供删除接口。 + > 目前除BC25/BG95/EC200A系列外,其余平台均支持本功能 +**示例** + +```python +import SecureData +# 即将存储的数据buf +databuf = '\x31\x32\x33\x34\x35\x36\x37\x38' +# 在index为1的存储区域中存储长度为8的数据databuf +SecureData.Store(1, databuf, 8) +# 定义一个长度为20的数组用于读取存储的数据 +buf = bytearray(20) +# 读取index为1的存储区域中的数据至buf中,将读取到数据的长度存储在变量length中 +length = SecureData.Read(1, buf, 20) +# 输出读到的数据 +print(buf[:length]) +``` + + ## 数据存储 ### `SecureData.Store` @@ -42,7 +60,7 @@ SecureData.Read(index,databuf,len) **参数描述** -* `index`,index范围为1-16:读取存储数据对应的索引号,int类型 +* `index`,index范围为1-16:待读取数据对应的索引号,int类型 * `databuf`,存储读取到的数据,bytearray类型 * `len`,要读取数据的长度,int类型 @@ -53,33 +71,3 @@ SecureData.Read(index,databuf,len) `-2`存储数据不存在且备份数据也不存在 `-1`参数有误 `其他`实际读取到的数据长度 - -**示例** - -```python -import SecureData -# 即将存储的数据buf -databuf = '\x31\x32\x33\x34\x35\x36\x37\x38' -# 在index为1的存储区域中存储长度为8的数据databuf -SecureData.Store(1, databuf, 8) -# 定义一个长度为20的数组用于读取存储的数据 -buf = bytearray(20) -# 读取index为1的存储区域中的数据至buf中,将读取到数据的长度存储在变量length中 -length = SecureData.Read(1, buf, 20) -# 输出读到的数据 -print(buf[:length]) -``` - -**使用示例** - -```python ->>> import SecureData ->>> databuf = '\x31\x32\x33\x34\x35\x36\x37\x38' ->>> SecureData.Store(1, databuf, 8) -0 ->>> buf = bytearray(20) ->>> length = SecureData.Read(1, buf, 20) ->>> print(buf[:length]) -bytearray(b'12345678') ->>> -``` diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\345\233\272\344\273\266.md" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\345\233\272\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..19a08591087f7979bf2431a4b7f2837c4e0d23a7 --- /dev/null +++ "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\345\233\272\344\273\266.md" @@ -0,0 +1,130 @@ +# OTA升级-固件 + +## 什么是OTA升级-固件 + +OTA:Over-the-Air Technology空中下载技术,是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。 + +OTA升级-固件就是利用这项技术进行模块固件升级。在QuecPython中该功能接口为[FOTA](/../../../API_reference/zh/QuecPython类库/fota.html)。为阅读体验以下均命名为FOTA。 + +## 怎么使用FOTA + +### 硬件设计 + +[FOTA](/../../../API_reference/zh/QuecPython类库/fota.html)升级主要为网络侧与模块内部交互,除前提条件模块需要组网成功外无需其他外围硬件支持。 + +### 软件应用 + +在之前的引言中已经提到OTA升级需要使用到HTTP服务器作为升级内容的存放点。对于FOTA而言是否就是存储需要升级的固件呢?答案不是。其主要原因也容易想到,无法就是固件太大与没内存缓存等。问题是不存储原始固件存储什么呢?答案是差分包。也是两版固件差异的部分。这样一来以上问题就得到了解决。 + +那问题来了,怎么制作差分包FOTA升级时怎么操作呢?下面我们分:`FOTA分类`;`差分包制作`;`软件设计`三个部分来分别介绍。 + +#### FOTA分类 + +FOTA类型分为三种:`差分升级`;`全量升级`;`最小系统升级`。下面就这三种FOTA类型的功能与支持的型号分别进行介绍。 + +| 序号 | FOTA类型 | 使用模组 | 实现功能 | +| ---- | ------------ | ---------------- | ----------------- | +| 1 | 差分升级 | 所有模组 | 固件升级 | +| 2 | 全量升级 | ASR_16MFlash模组 | 客户脚本升级 | +| 3 | 最小系统升级 | ASR_16MFlash模组 | 固件+客户脚本升级 | + +#### 差分包制作 + +为便于客户制作差分包简化流程,QuecPython团队将制作差分包功能集成到了QPYcom工具中。如下图添加制作FOTA包按钮进入制作FOTA工具。 + +![FOTA_1](media\FOTA_1.jpg) + +选择模块对应的平台。 + +![FOTA_1](media\FOTA_2.jpg) + +选择对应的FOTA类型后,依次选择旧/新固件包,选择差分包输出的文件夹,最后选择`OK`按钮即可生成对应的差分包 + +![FOTA_1](media\FOTA_3.jpg) + +若是进行全量或是最小系统升级,会需要选择”用户分区文件“。该文件存在于ASR的固件包中。将官网提供的.bin后缀固件修改为.zip后缀。然后使用压缩工具打开,其中的`customer_fs.bin`文件就是我们这里上传的文件。 + +注意:只有ASR_16M模组才会支持此升级类型。 + +![FOTA_1](media\FOTA_4.jpg) + +其他操作与上述差分升级流程类似,这里不做赘述。 + +#### 软件设计 + +首先将上面步骤制作的差分包上传至HTTP服务器中。然后模块执行如下代码进行FOTA升级。 + +```Python +# 差分升级 +import fota +import utime + +DEF_URL1 = 'url1' + +def result(args): + print('download status:', args[0], 'download process:', args[1]) + +def run(): + fota_obj = fota() # 创建 Fota 对象 + print("进入升级状态......") + res = fota_obj.httpDownload(url1=DEF_URL1, callback=result) + if res != 0: + print("httpDownload error") + return + print("wait httpDownload , update...") + utime.sleep(2) + +run() +``` + +```python +# 全量升级 +import fota +import utime + +DEF_URL1 = 'url1' + +def result(args): + print('download status:', args[0], 'download process:', args[1]) + +def run(): + fota_obj = fota() # 创建Fota对象 + print("httpDownload...") + res = fota_obj.httpDownload(url1=DEF_URL1, callback=result) + if res != 0: + print("httpDownload error") + return + print("wait httpDownload , update...") + utime.sleep(2) + +run() +``` + +```python +# 最小系统升级 +import fota +import utime + +DEF_URL1 = 'url1' +DEF_URL2 = 'url2' + +def run(): + fota_obj = fota() # 创建Fota对象 + print("httpDownload...") + res = fota_obj.httpDownload(url1=DEF_URL1, url2=DEF_URL2) + if res != 0: + print("httpDownload error") + return + print("wait httpDownload , update...") + utime.sleep(2) + +run() +``` + +注:`url1`与`url2`替换为文件存放服务器的连接。 + +## FOTA文件下载测试 + +使用QPYcom工具和模组进行交互,下载示例代码至模组进行运行。 + +FOTA过程模块会反复重启,请耐心等待。 \ No newline at end of file diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..4505ac400277dbd3913dd07346434b5720892b0b --- /dev/null +++ "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/OTA\345\215\207\347\272\247-\346\226\207\344\273\266.md" @@ -0,0 +1,64 @@ +# OTA升级-文件 + +## 什么是OTA升级-文件 + +OTA:Over-the-Air Technology空中下载技术,是通过移动通信的空中接口实现对移动终端设备进行远程管理的技术。 + +OTA升级-文件就是利用这项技术对模块进行文件升级。在QuecPython中该功能接口为[APP_FOTA](../../../API_reference/zh/QuecPython类库/app_fota.html)。为阅读体验以下均命名为APP_FOTA。 + +## 怎么使用APP_FOTA + +### 升级准备 + +在之前的引言中已经说到OTA升级需要使用到HTTP服务器作为升级内容的存放点。对于APP_FOTA而言,服务器需要存储客户需要升级文件内容。此部分工作由客户自主完成。目的就是得到一个可以访问下载到该文件的URL地址即可。 + +### 硬件设计 + +APP_FOTA升级主要为网络侧与模块内部交互,除前提条件模块需要组网成功外无需其他外围硬件支持。 + +### 软件应用 + +QuecPython中APP_FOTA功能支持单文件下载与批量文件下载。API接口分别为:**fota.download(url, file_name)**与**fota.bulk_download(info=[])**,有关API的详细介绍请参考[APP_FOTA](../../../API_reference/zh/QuecPython类库/app_fota.html)。 + +需要注意是:调用APP_FOTA接口后文件不是直接下载到**usr**分区(模块存放用户文件的分区),而是下载到一个临时的**.updater**文件夹中。该文件夹可能存在与**usr.updater**文件夹下,也可能存在于**./fota/usr/.updater**。但对于实际使用不需要关注这些。只需了解APP_FOTA后文件并非直接存在**usr**目录,需要**fota.set_update_flag()**设置升级标志位后重启模组才会自动将对应文件搬运至**usr**目录。 + +示例代码如下: + +```python +import app_fota +from misc import Power +import utime as time + + +files = ["file_name"] +download_list = [] +url = r"url" + +for file in files: + download_list.append({'url': (url + file), 'file_name': '/usr/%s' % file}) + +if download_list: + print("downlist: %d\r\n" % len(download_list), download_list) + fota = app_fota.new() + result = fota.bulk_download(download_list) + fota.set_update_flag() + + print("update ....", result) + time.sleep(1) + Power.powerRestart() # 重启模块 +``` + +注:`file_name`替换为需要下载的文件名加后缀一起。`url`替换为文件存放服务器的连接。 + +## APP_FOTA文件下载测试 + +使用QPYcom工具和模组进行交互,下载示例代码至模组进行运行。 + +APP_FOTA_DEMO运行前: + +![APP_FOTA_1](media/APP_FOTA_1.jpg) + +APP_FOTA_DEMO运行后: + +![APP_FOTA_2](media/APP_FOTA_2.jpg) + diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..db946ad046dc9c359a393aee1860938d98d19add Binary files /dev/null and "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/APP_FOTA_2.jpg" differ diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_1.jpg" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..96bf6cac844bedc520341720371b34fafafb2ec1 Binary files /dev/null and "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_1.jpg" differ diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_2.jpg" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_2.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..a52a1d910a1276a1974288c7d0833a8ea98d80ea Binary files /dev/null and "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_2.jpg" differ diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_3.jpg" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_3.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..4ab9838f00690d7c33ae9cc4142e417af502fc39 Binary files /dev/null and "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_3.jpg" differ diff --git "a/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_4.jpg" "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_4.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..4874ea88ff2eb04ec2879b3c2c4a0be6d4efbfc2 Binary files /dev/null and "b/docs/development_guide/zh/OTA\345\215\207\347\272\247/media/FOTA_4.jpg" differ