树莓派作为avr烧录器为Arduino写入BootLoader

事情起源

从网上买了一个arduino pro mini,接上串口之后发现无法烧录程序,扔了半年,中秋有时间拿出来搞一波。
首先怀疑买来的Arduino没有BootLoader,上网上搜了一下表现,确实是这个样子,那么问题就变成了如何给arduino烧录BootLoader

网上普遍有两种解法

  1. 买个烧录器烧录
  2. 用已有的arduino烧录ArduinoISP固件,然后给另一个Arduino烧录BootLoader

前者要花钱,后者的话需要另外一个Arduino,手头没有,但是手头有树莓派。考虑到之前用树莓派给路由器spi flash烧录过一次,觉得这次没准还是可以,网上大概查了一下,有工具,avrdude可以做这个事情,于是开搞。

烧录方法
  1. 下载代码

    下载avrdude这个开源软件的代码,下载地址:http://download.savannah.gnu.org/releases/avrdude/
    注意要下载 avrdude-6.1.tar.gz 这个文件,目前(2021年中秋)已经有6.3版本的新文件了,但是存在bug,会报错误
    Cant't export GPIO 12, alread exported/busy?: Invalid arguemnt”
    所以还是老老实实用6.1版本的代码吧

  2. 编译avrdude文件。之所以要编译是因为apt install的那个avrdude不支持linuxgpio

    	sudo apt install bison flex libusb-dev
    	./configure --prefix=/opt/avrdude --enable-linuxgpio
    	make
    	sudo make install 
    

    中间可能会报错,config.guess无法判定机器类型之类的,这份文件太老了,还是2003年的,无法用在树莓派上属实正常
    解决方法是去找文件的最新版

     git clone git://git.savannah.gnu.org/config.git
    

    找到config.guess和config.sub两个文件,替换就行了

  3. 配置avrdude
    找到/opt/avrdude/etc下面的conf文件,打开,搜索linuxgpio,会发现一段被注释了的配置,取消注释,并做如下配置

    programmer
      id    = "linuxgpio";
      desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
      type  = "linuxgpio";
      reset = 12;
      sck   = 24;
      mosi  = 23;
      miso  = 18;
    ;
    
  4. 连杜邦线
    实际上烧录固件时树莓派和Arduino是通过SPI接口通信的,所以要连的是两根电源线,一根reset线,外加SPI接口三根线。需要注意的一点是,reset这条线接入的并不是SPI的SS,接入的是arduino板子的reset口。下面这个图的arduino那边,请根据实际需要被刷bootloader的设备自己更改。

  5. 烧录bootloader文件
    bootloader文件没有单独下载的链接,需要安装arduino 官方ide,然后去安装目录下hardware文件夹里面找一下hex文件,一般有多个,不确定自己要刷入那个的话,看一下boards.txt文件,里面有描述说明

    最后就是烧录了,一行命令搞定

    sudo /opt/avrdude-6.1/bin/avrdude -p atmega328p -c linuxgpio -U flash:w:YOUR_BOOTLOADER_FILE_NAME.hex
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值