将GDK3开发成一个有趣的U盘

1.背景和基本目标

编写固件,将GDK3开发成一个具有奇异功能的U盘(UDisk)。

2. 根据本系列之一的提示搭建试验环境和下载GDK3 SDK

https://gedu.oss-cn-beijing.aliyuncs.com/Products/GDK3/sdk_v20240524.zip

3. 执行如下步骤构建gedisk固件

下面是编译过程需执行的命令,请注意这些命令中的路径要根据你自己的环境做调整!!!如有疑惑,可以看看GDK3上手系列之三。

下面是编译示例操作:

  • 设置工具链的路径
    export PATH=/d/GnuArmToolchain/bin/:$PATH
  • 切换到gedisk目录下,编译gedisk目录下的代码
    cd /d/work/gdk3sdk/src/gedisk
  • 输入make进行构建
    make

    4. 将编译好的固件烧录到GDK3

    下面是烧录操作的参考步骤:
  • 将gedisk.hex烧录到gdk3
    !program D:\\work\\gdk3sdk\\src\\gedisk\\gedisk.hex
  • 重启gdk3
    !reset

    5 测试效果

    将GDK3的USB1口连到计算机(上位机),看是否可以成功识别到U盘,识别成功的话,下图的e盘就是我们的GDK3啦,现在我们来读取一下GDK3中的文件,将GDK3中的文件复制到我们的电脑上。

    补充一下哈:GDK3的USB1接口既可以是主机模式又可以是设备模式,简称USBHD,USB2接口只能工作在设备模式。

    增强功能之数据加密

    修改写闪存的代码,将数据与固定的密钥GEDU2018做XOR(异或)操作,这样写到U盘上的数据再读出来就是乱码,在进行一次异或的话就可以解密。
    #include <iostream>
    using namespace std;
    #define MAXSIZE 100
    void INCODE(char* str1,int n)
    {
     uint8_t i;
     char b[] = "GEDU2018";
     for (i = 0; i < n; i++)
     {
         str1[i] = str1[i] ^ b[i%8];
         cout << str1[i];
     }
     cout << endl;
    }
    void DECODE(char* str2,int n)
    {
     uint8_t i;
     char b[] = "GEDU2018";
     for (i = 0; i <n; i++)
     {
         str2[i] = str2[i] ^ b[i%8];
         cout << str2[i];
     }
     cout << endl;
    }
    int main()
    {
     char a[MAXSIZE]="abcdefghigk12345678910";
     int n = strlen(a);
     INCODE(a,n);
     DECODE(a,n);
     return 0;
    }
    给大家看一下数据“abcdefghigk12345678910”进行加密和解密操作后的结果:
    注意哦:如果我们要加密的数据长度如果超过8个字节的话,就会越界,因为密钥只有八个字节,所以密钥相当于反复在8个字节里循环,这样就需要我们来做一个取余的操作。
    想看具体的操作的话,可以点击下面的链接,观看视频讲解。
    https://www.bilibili.com/video/BV1aW4y1u728/
作者:Zhang Yinkui  创建时间:2022-12-16 09:46
最后编辑:Zhang Yinkui  更新时间:2024-05-24 22:54