diff --git a/docs/Mass_production/zh/CodeEncryption.md b/docs/Mass_production/zh/CodeEncryption.md
index ad6d6023f7439ebfce5732caf5310da84c806a05..51bfd9ad433d7fd69bf105b7937c5362cf07f859 100644
--- a/docs/Mass_production/zh/CodeEncryption.md
+++ b/docs/Mass_production/zh/CodeEncryption.md
@@ -6,12 +6,13 @@
| -------- | ---------- | -------- | ------------ |
| 1.0 | 2021-04-07 | Chic | 初始版本 |
| 1.1 | 2021-07-08 | Chic | 增加交互保护 |
+| 1.2 | 2021-09-06 | Chic | 更新图片 |
## 加密方式介绍
- 在 python 中,可以将 py 文件编译为 pyc 文件。编译后的 pyc 文件是二进制格式,一是可以加快加载速度, 更重要的是可以保护原始代码。在 micropython 中同样提供了这个功能,只是它将 pyc 改名为 mpy,编译出的文件扩展名是.mpy。这一加密过程正是通过 mpy-cross 工具来完成。
+在 python 中,可以将 py 文件编译为 pyc 文件。编译后的 pyc 文件是二进制格式,一是可以加快加载速度, 更重要的是可以保护原始代码。在 micropython 中同样提供了这个功能,只是它将 pyc 改名为 mpy,编译出的文件扩展名是.mpy。这一加密过程正是通过 mpy-cross 工具来完成。
**使用mpy-cross保护py文件**
@@ -34,13 +35,13 @@
- 登录官方网站“[资源下载](https://python.quectel.com/download)”,在一级分类“资源”,二级分类“工具”栏中找到【QPYcom 图形化工具】,具体位置如下图:
-
+
-- 打开QPYcom工具后,在**“下载”**选项卡中有【加密】的选项。加密功能用于保护用户的APP代码,加密后使源代码.py编译成.mpy二进制代码;
+- 打开QPYcom工具后,在**“下载”**选项卡中有【加密】的选项,加密功能用于保护用户的应用代码,加密后使源代码.py编译成.mpy二进制代码;
-
+
- 注意:工具的加密功能在合并产生固件时生效,具体操作可参考《QuecPython产品开发及量产方案》
+ 注意:工具的加密功能在合并产生固件时生效
@@ -60,7 +61,7 @@ user.py加密后,就会变成user.mpy,我们可以直接用user.mpy代替原
-## 文件读出保护
+## 文件读保护

diff --git a/docs/Mass_production/zh/DataEncryption.md b/docs/Mass_production/zh/DataEncryption.md
index ebfa29a484213e29066bd41cea59db8a257bf556..e9c66314dedc01669966e9684460642d46a1508f 100644
--- a/docs/Mass_production/zh/DataEncryption.md
+++ b/docs/Mass_production/zh/DataEncryption.md
@@ -5,6 +5,7 @@
| **版本** | **日期** | **作者** | **变更表述** |
| -------- | ---------- | -------- | ------------ |
| 1.0 | 2021-04-07 | Chic | 初始版本 |
+| 1.1 | 2021-09-06 | Chic | 初始版本 |
@@ -68,9 +69,11 @@ import ubinascii
# 目前支持 md5,sha1, sha256
data = b"QuecPython" # 待加密数据
+data2 = b"QuecPython" # 待加密数据
hash_obj = uhashlib.md5()
hash_obj.update(data)
+# hash_obj.update(data2)
res = hash_obj.digest()
hex_msg = ubinascii.hexlify(res)
print("md5加密后的数据:", hex_msg)
@@ -78,6 +81,7 @@ print("md5加密后的数据:", hex_msg)
hash_obj = uhashlib.sha1()
hash_obj.update(data)
+# hash_obj.update(data2)
res = hash_obj.digest()
hex_msg = ubinascii.hexlify(res)
print("sha1加密后的数据:", hex_msg)
@@ -85,15 +89,26 @@ print("sha1加密后的数据:", hex_msg)
hash_obj = uhashlib.sha256()
hash_obj.update(data)
+# hash_obj.update(data2)
res = hash_obj.digest()
hex_msg = ubinascii.hexlify(res)
print("sha256加密后的数据:", hex_msg)
# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd'
+
+res = b'\x11\x22\x33123'
+print("原始数据:", res)
+res = ubinascii.b2a_base64(res)
+print("编码base64数据:", res)
+res = ubinascii.a2b_base64(res)
+print("还原base64数据:", res)
+
```
执行结果如下图:
-
+
+
+
## 更多内容
diff --git a/docs/Mass_production/zh/QuecPythonBack.md b/docs/Mass_production/zh/QuecPythonBack.md
index b84351be8948ed29b9627acd9eb10d5b1bef491a..dcf558efcb6344581630478663ae094560451d64 100644
--- a/docs/Mass_production/zh/QuecPythonBack.md
+++ b/docs/Mass_production/zh/QuecPythonBack.md
@@ -5,6 +5,7 @@
| **版本** | **日期** | **作者** | **变更表述** |
| -------- | ---------- | -------- | ------------ |
| 1.0 | 2021-04-07 | Chic | 初始版本 |
+| 1.1 | 2021-09-06 | Chic | 初始版本 |
@@ -90,11 +91,11 @@ file_crc32.calc('/usr/1.txt')
- 登录官方网站“[资源下载](https://python.quectel.com/download)”,在一级分类“资源”,二级分类“工具”栏中找到【QPYcom 图形化工具】,具体位置如下图:
-
+
-- 打开QPYcom工具后,在**“下载”**选项卡中有【备份】的选项,然后合并即可生成带备份的生产固件。
+- 打开QPYcom工具后,在**“下载”**选项卡勾选【备份】,合并即可生成带备份的生产固件。
-
+
diff --git a/docs/Mass_production/zh/README.md b/docs/Mass_production/zh/README.md
old mode 100755
new mode 100644
index a600bfa4229ea33b2d725ec0e47f6e22381db8ec..76c67164d5838d40d0ae20aca5d2f34e3fe45af5
--- a/docs/Mass_production/zh/README.md
+++ b/docs/Mass_production/zh/README.md
@@ -5,6 +5,7 @@
| **版本** | **日期** | **作者** | **变更表述** |
| -------- | ---------- | -------- | ------------ |
| 1.0 | 2021-04-07 | Chic | 初始版本 |
+| 1.1 | 2021-09-06 | Chic | 更新部分图片 |
@@ -12,17 +13,19 @@
- 登录官方网站“[资源下载](https://python.quectel.com/download)”,在一级分类“资源”,二级分类“工具”栏中找到【QPYcom 图形化工具】,具体位置如下图:
-
+
-- 打开QPYcom工具后,在**“下载”**选项卡中有【加密】【备份】的选项。加密功能用于保护用户的APP代码,加密后使源代码被掩盖;备份功能用于投入市场后,若APP意外丢失、被改写等,可从备份区恢复。
+- 打开QPYcom工具后,在**“下载”**选项卡中有【加密】【备份】的选项。
+- 加密功能用于保护用户的APP代码,加密后使源代码被掩盖;
+- 备份功能用于投入市场后,若usr区备份文件意外丢失、篡改等,自动从bak区恢复。
-
+
## 使用QPYcom生成量产固件包
-合并源码后,用户在生产时,只需烧录一次固件即可完成生产,在合并时已经将用户的APP文件嵌入到固件中,因此烧录合并后的固件已经包含了用户的APP文件。
+合并源码后,只需烧录一次固件即可完成生产,在合并时已经将usr区的文件嵌入到固件中,因此烧录合并后的固件已经包含usr区的文件。
### 合并条件
@@ -46,17 +49,15 @@
from usr import user_file # 用户的.py文件放在usr路径下,要用 from usr 导入APP
import utime
-
PROJECT_NAME = 'QUEC_TEST' # 必须要有这行代码才能合并
PROJECT_VERSION = '1.0.0' # 必须要有这行代码才能合并
-
if __name__ == "__main__": # 标准写法,从main.py开始执行
while True:
user_file.Qprint()
user_file.Qlistdir()
utime.sleep_ms(300)
-
+
```
*user_file.py*文件:
@@ -64,55 +65,49 @@ if __name__ == "__main__": # 标准写法,从main.py开始执行
```python
import uos
-
def Qprint():
print('Hello World !')
-
def Qlistdir():
print(uos.listdir('/usr'))
-
+
```
-将以上*main.py* 和*user_file.py*两个文件添加到要合并的*.py*中。固件建议使用官网发布的最新版本:[资源下载专区](https://python.quectel.com/download) 中找到对应的固件 。
-
-合并后的固件存放在用户指定的路径下,如《QUEC_TEST_1.0.0.zip》文件,文件名由*mian.py*中的变量**PROJECT_NAME**、**PROJECT_VERSION**组合而成。
-
-**注意:**
+将以上*main.py* 和*user_file.py*两个文件添加到usr区中。固件建议使用官网发布的最新版本:[资源下载专区](https://python.quectel.com/download) 中找到于模组型号对应的固件 。
-合并要和模组交互操作,故合并时需要连接模块,打开QuecPython的交互串口,并保证没有程序在运行,即能正常交互,方能合并:
+合并后的固件存放在用户指定的路径下,如《QUEC_TEST_1.0.0.zip》固件包,固件包名由*mian.py*中的变量**PROJECT_NAME**、**PROJECT_VERSION**组合而成。
-
+
仅需几秒钟,即可完成合并:
-
+
合并完成后的文件名是由*mian.py*中的变量**PROJECT_NAME**、**PROJECT_VERSION**组合而成
-
+
烧录合并后的固件,开机自动运行*main.py*:
-
+
## 量产工具
-- 登录官方网站“[资源下载](https://python.quectel.com/download)”,在一级分类“资源”,二级分类“工具”栏中找到【QMulti 批量下载工具】,具体位置如下图:
+- 登录官方网站“[资源下载](https://python.quectel.com/download)”,在一级分类“资源”,二级分类“工具”栏中找到【QMulti_DL 批量下载工具】,具体位置如下图:
-
+
- 打开软件后,在**“Load FW Files”**中选择上面合并后的固件,点击**“Auto ALL”**后,即自动检测8个通道直至烧录完毕:
- 首先,夹具通过USB先接入电脑。
+ 首先,夹具通过USB先接入电脑;
- 其次,在电脑打开QMulti 批量下载工具,并选择要烧录的固件,随后软件会自动检测烧录
+ 其次,在电脑打开QMulti_DL批量下载工具,并选择要烧录的固件,随后软件会自动检测烧录。
-
+
-**注意:**
+**提醒:**
只要夹具中的任意一个通信有模块接通电源,就会自动烧录。
@@ -124,22 +119,6 @@ def Qlistdir():
下载差分包生成教程和工具
-## 失败问题处理(模块中有脚本文件运行)
-
-**现象**:
-
-合并失败,QPYcom烧录固件没有反应
-
-上传py文件且文件名为*main.py*到模块后,无法任何执行指令(包括上传文件等)
-
-**原因**:
-
-模块在开机后会自动寻找运行文件名为*main.py*的脚本文件,如果*main.py*中存在*while*、*for(,,)*等无限循环语句,会导致程序阻塞,串口被占用,无法进行其他操作。
-
-**解决方案**:
-
-目前版本只能通过重刷固件解决此问题,建议在测试阶段尽量不要使用*main.py*文件,可使用*start.py*或其它命名来手动拉起项目,避免重刷固件。
-
## 附录A参考文档及术语缩写
diff --git a/docs/Mass_production/zh/media/image-20210906170850437.png b/docs/Mass_production/zh/media/image-20210906170850437.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c87f5d2cc2fdf259d0a3ebf87101a4d26e85815
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906170850437.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906171528571.png b/docs/Mass_production/zh/media/image-20210906171528571.png
new file mode 100644
index 0000000000000000000000000000000000000000..79c6cb5d8b21127b0b09edad423bfb69c173ad60
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906171528571.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906173316872.png b/docs/Mass_production/zh/media/image-20210906173316872.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3a2e8615f2b2d46d9f5bc796f11bd2f8ca9ed3a
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906173316872.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906173416123.png b/docs/Mass_production/zh/media/image-20210906173416123.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bbd53aa32076a0d2234e28f63aadec539f73699
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906173416123.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906173923292.png b/docs/Mass_production/zh/media/image-20210906173923292.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c063fbd2526734c14bb2200fa62f56a351bc586
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906173923292.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906174329859.png b/docs/Mass_production/zh/media/image-20210906174329859.png
new file mode 100644
index 0000000000000000000000000000000000000000..44df4e45d94bbc8a518852772cb6e12d6fd67c25
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906174329859.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906174758192.png b/docs/Mass_production/zh/media/image-20210906174758192.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb3cca3a4e2c4d6dc6f85af52d87b91b8ebd676c
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906174758192.png differ
diff --git a/docs/Mass_production/zh/media/image-20210906190809839.png b/docs/Mass_production/zh/media/image-20210906190809839.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bad7ff90a85bf0d252c2fb58d9bd2764e361598
Binary files /dev/null and b/docs/Mass_production/zh/media/image-20210906190809839.png differ
diff --git a/docs/Mass_production/zh/media/image-202109061rtyurewry4.png b/docs/Mass_production/zh/media/image-202109061rtyurewry4.png
new file mode 100644
index 0000000000000000000000000000000000000000..c72becdc48e948cf5853038555355ec5ee08daec
Binary files /dev/null and b/docs/Mass_production/zh/media/image-202109061rtyurewry4.png differ