0%

使用Atmega328P搭建Arduino最小系统

简介

  • 最近为了方便折腾硬件CTF,于是准备用Atmega328P-PU搭建Arduino最小系统
  • 需要用到的器件
    • 面包板 x1
    • Atmega328P-PU x 1
    • USB转UART x1(建议有DTR引脚的,可以用来自动Reset)
    • 22pF 陶瓷电容 x2
    • 16 MHz晶振
    • Arduino uno或者Arduino mini x1(用于给Atmega328P-PU芯片烧录bootloader)
    • 导线(杜邦线,面包板线)
    • 1µF (100nF) 陶瓷电容x2(可选)
    • 10 kΩ电阻(可选)
    • 二极管(可选)

arduino

开始

  • Atmega328P-PU的引脚定义如下图所示:

    2022-08-29.9.25.35

  • Arduino最小系统电路图

    image-20220903105923715

  • 接下来根据上面的电路图来构造arduino最小系统,下图为使用的配件

    image-20220903135808882

  • 首先,如下图所示,将16MHz的晶振连接atmega328p的第9和第10引脚

    step-1

  • 接着,如下图所示,用两个22 pF的陶瓷电容分别连接atmega328p的8-9和8-10(其中8脚为GND)

    step-2

  • 接着,如下图所示,将二极管的正极连接atmega328p的19引脚,负极连接22引脚(GND)

    step-3

  • 接着,如下图所示,将7脚(Vcc)和8脚(GND)引出,以便后面接入电源供电

    step-4

  • 接着如下图所示,在7脚(Vcc)和8脚(GND)之间连接一个1µF(100nF)的陶瓷电容

    step-5

  • 接着如下图所示,用10kΩ的电阻将1脚(Reset)与7脚(Vcc)相连,用一个1µF电容将1脚引出(用于后面与USB转UART串口的DTR引脚相连)

    step-6

  • 如下图所示,将USB转UART的GND和Vcc分别与atmega328p的GND和Vcc相连(注意需要5v输出,如果串口输出电压不对,可以选择给atmega328p独立供电,uart与atmega328p只连GND)

    step-7

  • 接着如下图所示,将UART的Tx与atmega328p的2脚(Rx)相连,UART的Rx与atmega328p的3脚(Tx)相连

    step-8

  • 接着如下图所示,将UART的DTR引脚与上面的1µF陶瓷电容与1脚串联

    step-9

  • 最小系统的电路至此构建完毕,但是由于此时atmega328p芯片没有bootloader程序,所以不能直接跑任何东西,需要先刷入bootloader程序

  • 下面以Arduino Uno为例(Arduino mini等其它设备也可以),为atmega328p烧录bootloader

  • 如下图所示,将Arduino Uno的10脚直接与atmega328p的1脚相连(这里不需要串联电容),将Arduino uno的11、12、13引脚依次与atmega328p的17、18、19引脚相连

    image-20220903144913266

  • 将Arduino Uno和USB转UART连接到电脑(为atmega328p供电,可以独立供电)

  • 如下图所示,打开ArduinoIDE,选择 文件 > 示例 > ArduinoISP,打开一个示例文件

    image-20220903133709896

  • 接着选择 工具 > 开发板 > Arduino Uno

    image-20220903133759177

  • 接着选择 工具 > 端口 > xxxx (Arduino Uno),选中Arduino Uno设备

    image-20220903133842275

  • 选择 项目 > 上传(或者左上角上传按钮上传),将ArduinoISP上传到Arduino Uno,这样就可以用Arduino Uno来当作编程器为atmega328p烧录bootloader了

    image-20220903133936606

    image-20220903134000547

  • 接着选择 工具 > 编程器 > Arduino as ISP

    image-20220903134054119

  • 最后,如下图选择 工具烧录引导程序,等待烧录完成,即可为atmega328p刷入bootloader

    image-20220903134114418

    image-20220903134135909

  • 断开Arduino Uno与电脑连接,拔掉Arduino Uno在面包板上的线恢复至最小系统电路图状态,如下图所示

    step-9

  • ArduinoIDE中重新选择端口,选中你的USB转UART设备(不同USB转UART设备显示不一样),如下图

    image-20220903134224235

  • 选择 文件 > 示例 > Basics > Blink打开一个示例项目

    image-20220903134251325

  • 选择上传,此时不出意外,即可使用USB转串口给构造的Arduino最小系统上传一个程序

    image-20220903134320460

    image-20220903150322243

  • 最终运行效果,如下图所示,二极管将每隔一段时间亮一次

    arduino

结语

  • 网上搜索了很多Arduino最小系统的相关教程,折腾了挺久,这里将我个人觉得比较好的方案记录下来
  • 下一篇将基于这个最小系统,来解一道硬件CTF的题

参考链接