zoukankan      html  css  js  c++  java
  • 嵌入式下的深度学习 Sparkfun Edge with TensorFlow(一)Hello World

    嵌入式下的深度学习 Sparkfun Edge with TensorFlow(一)Hello World

    硬件、软件环境

    微控制器:Sparkfun Edge

    • 32位ARM Cortex-M4F处理器
    • 48MHz CPU时钟,带有TurboSPOT™的96MHz
    • 极低功耗:6uA / MHz
    • 1MB Flash
    • 384KB SRAM
    • 两个麦克风,一个三轴加速度计和一个摄像头连接器

    TinyML链接:https://pan.baidu.com/s/1G_WB7QhnxcZJxpKpK_NBSA
    提取码:mgj1

    git clone https://github.com/tensorflow/tensorflow.git
    cd tensorflow

    编译

    在拉下的repo中已经有了书中的源码,所以可以直接编译。

    # 编译在板子上运行的二进制文件
    make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

    在这里就有问题了。make的过程中会连续下载几个包,由于服务器在国外,国内的速度特别慢,一旦中途因网络超时下载失败就需重新make,但第二次make时不会重新下载或断点下载上一次下载失败的包,缺包编译就会失败。这时在第二次make前在 tensorflow/lite/micro/tools/make/downloads 里删除刚才下载失败的目录,第二次make就会重新下载。

    如果几次后还是不行成功编译,只能重新删除整个tensorflow的repo,再重新刚才的流程。

    可以让ubuntu终端走国外代理完成这几个包的下载。

    Linux 让终端走代理的几种方法 https://zhuanlan.zhihu.com/p/46973701

    Linux终端代理方式  https://www.cnblogs.com/hi-eric/p/11563245.html

    # 签名
    python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py --bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin --load-address 0xC000 --magic-num 0xCB -o main_nonsecure_ota --version 0x0
    
    # 生成真正在板子上运行的二进制文件
    python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py --load-address 0x20000 --bin main_nonsecure_ota.bin -i 6 -o main_nonsecure_wire --options 0x1

     最后生成的main_nonsecure_wire.bin才是真正要烧进去的文件。

    烧写

    # 波特率
    export BAUD_RATE=921600
    # 设备号
    export DEVICENAME="/dev/ttyUSB0"
    # 烧写
    python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py -b ${BAUD_RATE} ${DEVICENAME} -r 1 -f main_nonsecure_wire.bin -i 6

    烧写前,必须先按住bootloader键(14键),按住14键的同时,按一下reset键,此时仍然按住14键不松,然后才能执行Python的烧写命令,同时,不要忘了sudo chmod 666 /dev/ttyUSB0,以给其足够的权限。

    烧写器用的是沁恒的CH34x,Ubuntu的默认CH340驱动是有问题的,有可能烧不进去。解决办法:重新编译CH34x驱动并加载驱动。

    $ git clone https://github.com/juliagoda/CH341SER.git
    $ cd CH341SER/
    $ make
    $ sudo insmod ch34x.ko
    $ sudo rmmod ch341

    但是这是动态加载驱动的方式,所以每一次重启后,再运行最后两句重新加载驱动。

    好了,至此,已经可以通过官方的开发方式或Arduino IDE的开发方式写工程了。

  • 相关阅读:
    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9
    python的基本语法
    POSIX标准 库文件
    C 标准库头文件
    管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理
    函数指针和指针函数的区别
    Linux之正则表达式1
    windows与linux换行规则
    Linux之find
    Linux之文件(目录)默认权限、特殊权限与隐藏权限
  • 原文地址:https://www.cnblogs.com/guangnianxd/p/12542184.html
Copyright © 2011-2022 走看看