From 2ae13d9182fe78696b2c33199da6728b08ffe4c0 Mon Sep 17 00:00:00 2001 From: hzh <1258016464@qq.com> Date: Wed, 26 Jan 2022 17:05:30 +0800 Subject: [PATCH] =?UTF-8?q?220126=5FHZH=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Todo_hzh.txt" | 30 +++++++++++++++++- ...1\347\232\204\350\256\276\350\256\241.txt" | 13 ++++++++ ...\346\225\260\346\215\256\345\214\205.xlsx" | Bin 0 -> 12005 bytes 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 "\347\241\254\344\273\266\345\237\272\347\241\200/\345\224\257\344\270\200\350\257\206\345\210\253\347\240\201\347\232\204\350\256\276\350\256\241.txt" create mode 100644 "\347\241\254\344\273\266\345\237\272\347\241\200/\346\225\260\346\215\256\345\214\205.xlsx" diff --git "a/\345\233\275\346\260\221\345\267\245\344\275\234\350\277\233\345\261\225\345\221\250\346\212\245/Todo_hzh.txt" "b/\345\233\275\346\260\221\345\267\245\344\275\234\350\277\233\345\261\225\345\221\250\346\212\245/Todo_hzh.txt" index d1f348e..e330247 100644 --- "a/\345\233\275\346\260\221\345\267\245\344\275\234\350\277\233\345\261\225\345\221\250\346\212\245/Todo_hzh.txt" +++ "b/\345\233\275\346\260\221\345\267\245\344\275\234\350\277\233\345\261\225\345\221\250\346\212\245/Todo_hzh.txt" @@ -1,3 +1,14 @@ +[2022年1月26日 周三] [09点37分] +[任务描述] +1. 按照数据包的格式,分别在PC和NS3108上编写CJSON的打包和解析代码,并验证其可行性 [已完成][15点49分] +2. 将数据包格式整理好 [已完成][16点09分] +3. 请教使用NS3108生成唯一识别码 +4. 时间节点外发 [已完成][15点54分] +5. 请假 [已完成][15点27分] +6. 将testUar3 merge到master上 [已完成][17点00分] +7. check了新分支testAlg和testFlash。分别用于验证算法接口和flash存储 [17点02分] + + [2022年1月25日 周二] [09点34分] [任务描述] 0. 额外任务:编写exe文件用于生成串口中断的测试指令 [16点13分] @@ -8,7 +19,12 @@ 1. uart0的输入,每个byte必须为了两个bit,即0x01,已将测试文件修改 2. TestUart()好像还是会抢占线程?导致后面的TestCJson()无法执行 [17点14分] 已解决,TestUart()的嵌套程序中有while(1); - +[明日任务]简单记录一下明天的工作 +0. 将数据包格式整理好上传 +1. 按照数据包的格式,分别在PC和NS3108上编写CJSON的打包和解析代码,并验证其可行性 +2. 申请将时间节点外发,存到material中 +3. 请教使用NS3108生成唯一识别码 +4. 着手设计终端唯一识别码 [思考] [10点46分] 1.移植CJson到NS3108上用以打包和解析需要上传和下发的数据 2.疑问是我需要对整个JSON去加密吗,如果需要,加密过程可以分为: @@ -36,6 +52,7 @@ 7. "我想可以使用 efuse 中的另一个空闲区域来存储 mac 并将 mac 读取功能指向那里" 8. 根据上一条 + [2022年1月24日 周一] [09点43分] [上周总结] 1. 勉强搞定了串口,但是没有显示协议。 @@ -54,6 +71,7 @@ 2. 在NS3108上验证协议的语法基础 [已完成] 3. 在NS3108上编写数据包解析函数 [已完成] + [2022年1月21日 周五] [11点02分] 1. 串口接收中断卡进程的问题,等待杨老师解决。不确定是不是没有清空标志位还是别的原因 2. 在iot那里搭建了esp的windows开发环境 @@ -65,10 +83,12 @@ i:DMA调用,试试看能否使用DMA的接收中断 ii:IOM中断,通过IO口的电平变化唤醒芯片,打开中断,开始发送数据,通过头帧和尾帧确定接收内容,关闭中断,处理数据同时等待IOM中断再次发生。 + [2022年1月18日 周二] [09点39分] [任务描述] 1. 昨天的串口收发出了大问题,原来看数据量没问题以为一切正常,但看到打印内容之后发现全是\0,需要重新调试 + [2022年1月17日 周一] [上周总结] [09点41分] 1. 代码完成了编译和烧写,可以回boot,掉电虽然电压不稳定但是无关大局。 @@ -106,6 +126,7 @@ 完整教程:https://blog.csdn.net/xh870189248/article/details/77985541 https://xuhong.blog.csdn.net/article/details/104736261 + [2022年1月13日 周四] [任务简述] [09点37分] 1. 加上HUB看看电脑能不能识别加密芯片,如果不行,则需要上报 @@ -124,6 +145,8 @@ https://xuhong.blog.csdn.net/article/details/104736261 https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/index.html https://www.cnblogs.com/dongxiaodong/p/12905967.html https://blog.csdn.net/u010177891/article/details/92085166?spm=1001.2014.3001.5502 + + [2022年1月12日 周三] [任务简述] [09点57分] 1. 参考stm32的相关例程及原理,封装中断服务函数 (完成) @@ -133,6 +156,7 @@ https://xuhong.blog.csdn.net/article/details/104736261 1. 开发板识别不到,无法成功烧录 2. 完成了step1和step2代码的编写和校准,模拟数据稳定,但因上述原因无法实机检验。 + [2022年1月11日 周二] [任务简述] 1. 安装并配置SI4并,导入demo工程,实现相关索引 (完成) @@ -146,6 +170,7 @@ https://xuhong.blog.csdn.net/article/details/104736261 2. 搞定了USB烧录问题:瘦终端无法完成USB映射,前往探测室完成烧写和调试 3. UART代码稍稍写了点,但是不够,中断服务函数的封装过于底层,用户层面的实现并不理想 + [2022年1月10日 周一] [上周总结] 周二入职,周三请假上课,周四配置电脑环境,周五领到了开发板、demo和资料。大概了解了一下开发板demo的框架,对其有了粗略的印象 @@ -158,6 +183,7 @@ https://xuhong.blog.csdn.net/article/details/104736261 ii:准备对应开发模式的相关材料,移植相关例程。 iii:实现简单联调,马马虎虎完成本周任务 + [2022年1月8日 周六] 在图书馆 昨天拿到了demo,开发难度比预想的要大不少。原因有一下几个: 1. 国民的加密芯片是自研的,代码大致是寄存器操作的硬件开发,并在此基础上进行了风格很重的api封装,且api的封装既没有注释更没有使用手册,这给预想的快速开发带来了一定难度。 @@ -167,6 +193,7 @@ https://xuhong.blog.csdn.net/article/details/104736261 1. 学习密码学相关的底层硬件原理?大概应该是这个东西? 2. 学习stm32寄存器开发的相关操作,尤其是偏址、移位和与或等相关操作。 + [2022年1月7日 周五] [任务简述] 1. 认识和熟悉开发环境及板子demo @@ -174,6 +201,7 @@ https://xuhong.blog.csdn.net/article/details/104736261 3. 尝试更改demo 日志存留在国民的RD桌面之中 + [2022年1月6日 周四] [任务简述] 1. 搭建开发环境 diff --git "a/\347\241\254\344\273\266\345\237\272\347\241\200/\345\224\257\344\270\200\350\257\206\345\210\253\347\240\201\347\232\204\350\256\276\350\256\241.txt" "b/\347\241\254\344\273\266\345\237\272\347\241\200/\345\224\257\344\270\200\350\257\206\345\210\253\347\240\201\347\232\204\350\256\276\350\256\241.txt" new file mode 100644 index 0000000..4e55941 --- /dev/null +++ "b/\347\241\254\344\273\266\345\237\272\347\241\200/\345\224\257\344\270\200\350\257\206\345\210\253\347\240\201\347\232\204\350\256\276\350\256\241.txt" @@ -0,0 +1,13 @@ +终端设备的唯一识别码并不能简单的随便从ESP或者NS3108拿一段唯一码,要在考虑设备伪造的情况下,实现ESP和NS3108的绑定。 +一、ESP的唯一识别码 + 在设计手册和博客论坛等多种渠道下获得的可能的方案有: + 1. mac地址 + 每台设备都会有唯一的mac地址,但可以被用户更改。在官方给出的英文手册中,找到了设置用户mac的api + 接口。不过根据官方人员在论坛上的回答,可以通过指令使得该efuse段锁死,即可以操作mac地址的熔断,使其不能够再被更改。或者在固件中烧毁这个熔断器的写保护位。 + 但这个方法显得有些极端,同时,熔断器所在的位置及相关结构需要参考相关设计参考手册,但这份手册官方并没有给出。 + 2. flash 64bits UniqueID + 说法依旧来自与官方人员,与上面相比,这个方案的资料更少。 + 3. 将mac地址重新映射 + 可能将mac地址重写到flash中,又或者esp32提供的efuse控制器。 + https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/efuse.html + 4. esp32的flash加密 \ No newline at end of file diff --git "a/\347\241\254\344\273\266\345\237\272\347\241\200/\346\225\260\346\215\256\345\214\205.xlsx" "b/\347\241\254\344\273\266\345\237\272\347\241\200/\346\225\260\346\215\256\345\214\205.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..601b483635e6339d6f3ddaeb26163f460e82c4a4 GIT binary patch literal 12005 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 literal 0 HcmV?d00001 -- Gitee