2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计

≯℡__Kan透↙ 提交于 2019-12-21 14:27:51

2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计

实验内容


1-MDK

实验要求

  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM)
  • 提交破解程序中产生LIC的截图

  • 提交破解成功的截图

实验步骤

  • 按照实验指导书上的操作进行软件安装

  • 运行 uVision4,点 File>>License Management-->复制 CID

  • 运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”)
  • 粘贴 CID 并选择 ARM。


LIC生成.png

mdk破解.png


2-LED

实验要求

  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图

  • 实验报告中分析代码

实验步骤

  • 首先先在 KEIL-MDK 中添加 Z32 SC-000 芯片库,操作过程为:
  1. 打开 keil uVision4 MDK。
  2. 新建工程选择 Project——>New uVision Project。
  3. 在弹出的安装路径窗口选择安装路径文件夹,并为工程命名。
  4. 在芯片库选择框选择库 Generic SC000 Device Database。
  5. 点开 ARM 结构目录,选择 SC000,点击 OK,搭建完成。
  6. 搭建成功截图:

MDK-SC000库支持.PNG
MDK项目创建.PNG

MDK项目创建_2.PNG

MDK项目创建_3.PNG


  • 完成LED等闪烁实验
  • 在 user 组和 driver组下分别双击Main.c和Gpio.c,就可以看到程序的源代码。打开 Main.c,代码如下:
    MDK项目编译.PNG

  • 打开“Z32 开发指南\实验1-LED闪烁”目录的工程文件。编译工程,产生后缀名为.bin 的可执行代码。

  • 将实验箱接入电源,用USB公对公线将实验箱的USB接口连接到电脑的USB接口上,在电脑上找到“Z32开发指南\2.软件资料\Z32下载调试工具”目录打Z32 下载调试工具NZDownloadTool.exe。打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。

  • 当左边框出现“1设备已连接”,设备选择中显示芯片型号,此时就可以下载程序了。我们点击窗口右下方“确认下载”一栏的“浏览”,选择程序路径为“Z32开发指南\实验 1-LED闪烁\bin\Z32HUA.bin”)打开,最后点击下载。


控制LED闪烁的代码
int main(void)
{
/*********************此段代码勿动***********************/
//系统中断向量设置,使能所有中断
  SystemInit ();
// 返回 boot 条件
  if(0 == GPIO_GetVal(0))
  {
      BtApiBack(0x55555555, 0xAAAAAAAA);
  }
/*********************此段代码勿动***********************/
  GPIO_PuPdSel(0,0); //设置 GPIO0 为上拉
  GPIO_InOutSet(0,0); //设置 GPIO0 为输出
  while(1)
  {
      delay(100);
      GPIO_SetVal(0,0); //输出低电平,点亮 LED
      delay(100);
      GPIO_SetVal(0,1); //输出高电平,熄灭 LED 
  }
}
  //延时函数,当系统时钟为内部 OSC 时钟时,延时 1ms
void delay(int ms)
{
  int i;
  while(ms--)
  {
      for(i=0;i<950;i++) ;
  }
}
观察LED闪烁情况

IMG_20191111_133310.jpg

IMG_20191111_133318.jpg


3-UART

实验要求

  • 注意不经老师允许不准烧写自己修改的代码
  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.0”完成UART发送与中断接收实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
  • 实验报告中分析代码

    实验步骤

  • 首先和实验二中一样在 KEIL-MDK 中添加 Z32 SC-000 芯片库
    设备已连接_uart.PNG


  • 然后完成UART发送与中断接收实验,代码如下
    IMG_20191111_134500.jpg

  • 打开“Z32 开发指南\实验8-SM1”目录的工程文件。编译工程,产生后缀名为.bin 的可执行代码。
  • 将实验箱接入电源,用USB公对公线将实验箱的USB接口连接到电脑的USB接口上,在电脑上找到“Z32开发指南\2.软件资料\Z32下载调试工具”目录打开 Z32 下载调试工具 NZDownloadTool.exe。打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32 即可被电脑识别,进行下载调试。
  • 当左边框出现“1设备已连接”,设备选择中显示芯片型号,此时就可以下载程序了。我们点击窗口右下方“确认下载”一栏的“浏览”,选择程序路径为“Z32开发指南\实验 8-SM1\bin\Z32HUA.bin”并打开,最后点击下载。
    显示结果_uart.PNG

代码分析

  • 串口相关函数:包括串口中断服务、波特率设置、串口初始化、发送/接收单字节、发送字符串、发送单个十进制整数、发送单个十六进制整数、发送某一长度的字符串、接收多字节函数
  • void UART_IrqService(void)是串口中断服务函数,本实验中实现串口中断执行子程序,从PC端串口调试助手发送数据至Z32,Z32再经串口发送PC机
  • void UART_BrpSet(UINT16set)是波特率设置函数,串口实验波特率设置为 115200
  • void UART_Init(void)是串口初始化函数,实现配置串口时钟、使能中断
  • void UART_SendByte(UINT8 dat)是发送单字节函数,使用此函数一次发送一个字节数据
  • void UART_SendString(UINT8 *str)是发送字符串函数,使用此函数发送字符串数据
  • void uart_Send String(UINT8 buf[],UINT8length)是发送某一长度的字符串函数,实现发送一定长度的字符串数据
  • void UART_Send Num(INT32 num)是发送单个十进制整数函数,使用此函数发送一个十进制整数
  • void UART_Send Hex(UINT8 dat)是发送单个十六进制整数函数,使用此函数发送一个十六进制整数
  • UINT8 UART_Get Byte(UINT8 *data)是接收单字节函数,使用此函数接收单字节数据
  • void UART_Receive(UINT8 *receive, UINT8 len)是接收多字节函数,使用此函数接收多个字节数据
  • 主函数
  1. 系统初始化,中断设置,使能所有中断
  2. 判断按键,返回 boot 条件,确认是否进行程序下载
  3. 初始化Uart,使能Uart接口,配置Uart中断并使能
  4. 发送16位数“0x AA”,换行,在发送字符串“hzyy”,换行
  5. 进入while循环程序,等待串口中断到来并判断数据是否接收完毕,若中断到来,转
  6. 入执行串口中断服务程序,待接收数据完毕,Z32将数据发回串口助手

4-国密算法

实验要求

  • 网上搜集国密算法标准SM1,SM2,SM3,SM4
  • 网上找一下相应的代码和标准测试代码,在Ubuntu中分别用gcc和gcc-arm编译
  • 四个算法的用途?
  • 《密码学》课程中分别有哪些对应的算法?
  • 提交2,3两个问题的答案
  • 提交在Ubuntu中运行国密算法测试程序的截图

    实验步骤

    问2
  • SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
  • SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
  • SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
  • SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

    问3
  • SM1:密码学对应算法:DES,AES;
  • SM2:密码学对应算法:ECC椭圆曲线算法;
  • SM3:密码学对应算法:SHA-1,SHA-3,MD5;
  • SM4:密码学对应算法:DES,AES。

    运行结果


5-SM1

实验要求

  • 注意不经老师允许不准烧写自己修改的代码

  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图
  • 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.16”完成SM1加密实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图
  • 实验报告中分析代码

    实验步骤

  • 将实验箱接入电源,用USB公对公线将实验箱的USB接口连接到电脑的USB接口上,在电脑上找到“Z32 开发指南\2.软件资料\Z32 下载调试工具”目录打开 Z32 下载调试工具 NZDownloadTool.exe。打开Z32的电源开关前,按住Reboot 按键不放,两次打开电源开关,Z32 即可被电脑识别,进行下载调试
  • 实验结果
    IMG_20191111_135751.jpg

IMG_20191111_135814.jpg

IMG_20191111_135855.jpg

IMG_20191111_135951.jpg

IMG_20191111_140236.jpg

加密_sm1.PNG
加密_sm1_2.PNG
IMG_20191111_140414.jpg

IMG_20191111_140453.jpg

IMG_20191111_140704.jpg

IMG_20191111_140741.jpg
解密_sm1_正确_1.PNG

解密_sm1_正确_2.PNG

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!