raspberry4安装avrdude-烧录arduino固件-自启动教程

6 篇文章 0 订阅
3 篇文章 0 订阅

AVRdude

arvdude为一个开源烧录avr单片机工具。

官网:http://www.nongnu.org/avrdude/
下载:http://download.savannah.gnu.org/releases/avrdude/

ISP烧录arduino bootloader

树莓派 2021-05-07-raspios-buster-armhf-full(Linux raspberrypi 5.10.17-v7l+)版本实测 avrdude-6.2.tar.gz 完全兼容,建议使用此版本。

avrdude使用教程:http://www.nongnu.org/avrdude/user-manual/avrdude.html

终端执行安装命令
执行命令前请将安装包下载到树莓派中并解压。

	cd /home/pi/Downloads/avrdude-6.2
	#sudo apt install bison flex libusb-dev  #看情况执行
	./configure --prefix=/home/pi/avrdude --enable-linuxgpio=yes  
	make
	sudo make install 

–prefix=/home/pi/avrdude:安装路径
–enable-linuxgpio=yes :使能linuxgpio

在执行./configure … 命令时出现缺少文件提示可以忽略,只要确保linuxgpio使能了即可,如下:

Configuration summary:
----------------------
DON'T HAVE libelf
DO HAVE    libusb
DON'T HAVE libusb_1_0
DON'T HAVE libftdi1
DON'T HAVE libftdi
DON'T HAVE libhid
DO HAVE    pthread
DISABLED   doc
DISABLED   parport
ENABLED    linuxgpio

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

programmer
  id    = "linuxgpio";
  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
  type  = "linuxgpio";
  reset = 17;
  sck   = 18;
  mosi  = 22;
  miso  = 27;
;

上面的配置为目标烧录板连接到树莓派对应的IO口。
在这里插入图片描述

UNO烧录固件示例
mega328p
执行指令

#!/bin/sh

# Burn the fuse
sudo ./avrdude/bin/avrdude -p atmega328p -c linuxgpio -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m 

# Burn the bootload hex
sudo ./avrdude/bin/avrdude -p atmega328p -c linuxgpio -U flash:w:./bootload/uno/optiboot_atmega328.hex:i -U lock:w:0x0F:m 

mega328pb:爱特梅尔最新推出mega328pb用于替换mega328p,需要在avrdude.conf相应配置:

part parent "m328"
    id			= "m328p";
    desc		= "ATmega328P";
    signature		= 0x1e 0x95 0x0F;
    
    ocdrev              = 1;
;
# 以下为新增的配置
part parent "m328"
    id			= "m328pb";
    desc		= "ATmega328PB";
    signature		= 0x1e 0x95 0x16;
    
    ocdrev              = 1;
;

执行指令

# Burn the fuse
sudo ./avrdude/bin/avrdude -p atmega328pb -c linuxgpio -e -u -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m 

# Burn the bootload hex
sudo ./avrdude/bin/avrdude -p atmega328pb -c linuxgpio -U flash:w:./bootload/uno/optiboot_atmega328.hex:i -U lock:w:0x0F:m 

树莓派4自启动设定
方法一
树莓派开机后会自动执行rc.local文件下的指令,所以可以将需要开机执行的命令增加到文件内。

sudo nano /etc/rc.local 

新增如下命令,要保证exit 0这行代码在最后。

# burn avrchip bootload
cd /home/pi/avrburn 
sudo python bootload.py &

如果需要长时间运行(例如死循环)或者运行后不能退出,那么必须确保在命令的最后添加“&”符号让命令运行在其它进程。

注意,这里树莓派开机会自动执行bootload.py文件,因为bootload.py文件调用了其他文件或者bash脚本,所以必须先执行“cd /home/pi/avrburn ”命令,进入到bootload.py的根目录中,否则只会执行bootload.py文件,却执行不了bootload.py中调用的文件。

方法二
在/etc/init.d/中创建一个文件,命名为my_start(任意名称)。

#!/bin/bash
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop vncserver
### END INIT INFO

case "$1" in
    start):
        echo "Starting app"
        nohup python3 /home/pi/share/ip_acquire.py & 
    ;;
    stop):
        echo "to"
        #kill $( ps aux | grep -m 1 'python3 /home/pi/share/ip_acquire.py' | awk '{ print $2 }') ;; *)
        echo "Usage: service start_tool start|stop"
        exit 1 ;;
esac

exit 0

修改文件权限

sudo chmod 777 /etc/init.d/my_start

这样启动改脚本就可以用service 命令,在使用该指令前,需要重启一下系统,不然会提示没有该服务。

sudo service my_start start  #启动
sudo service my_start stop   #停止

添加开机启动

sudo update-rc.d my_start defaults

删除开机启动

sudo update-rc.d -f vncserver remove

一个自启动vncserver实例:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          vncserver
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop vncserver
### END INIT INFO
 
# More details see:
# http://www.penguintutor.com/linux/vnc
 
### Customize this entry
# Set the USER variable to the name of the user to start vncserver under
export USER='pi'
### End customization required
 
eval cd ~$USER
 
case "$1" in
  start)
    # 启动命令行。此处自定义分辨率、控制台号码或其它参数。
    su $USER -c '/usr/bin/vncserver -depth 24 -geometry 1024x768 :1'
    echo "Starting VNCServer for $USER "
    ;;
  stop)
    # 终止命令行。此处控制台号码与启动一致。
    su $USER -c '/usr/bin/vncserver -kill :1'
    echo "VNCServer stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/vncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

方法三
在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个xxx.desktop文件(文件名以.desktop结尾,前面可以自定义),文件内容如下:

[Desktop Entry]
Name=example
Comment=My Python Program
Exec=python /home/pi/example.py
Icon=/home/pi/example.png
Terminal=false
MultipleArgs=false
Type=Application
Categories=Application;Development;
StartupNotify=true

以上 Name、Comment、Icon 可以自定,分别表示这个启动项目的名称、备注以及显示的图标。Exec 表示调用的指令,和在终端输入运行脚本的指令格式一致。

配置avrdude.conf文件实现USB to serial port 烧录应用hex文件(烧录bootloader后)




Arduino IDE中的USB to serial port 烧录应用hex文件(烧录bootloader后)

直接使用官网下载的原生avrdude,ISP烧录时会将bootloader也擦除掉,配置 avrdude.conf 文件避免flash被全部擦除也比较麻烦。使用arduino IDE中的avrdude.exe,可以通过usb端口将代码上传到AVR单片机中,无需复杂的配置,直接一个指令即可。

需要三个文件:
avrdude.conf、avrdude.exe、libusb0.dll在arduino目录下,位置:
avrdude.conf:Arduino\hardware\tools\avr\etc\avrdude.conf
avrdude.exe:Arduino\hardware\tools\avr\bin\avrdude.exe
libusb0.dll:Arduino\hardware\tools\avr\bin\libusb0.dll(linux系统下没有此文件)

单独拷贝这三个文件到一个文件夹下。

执行指令
在windows下执行

.\avrdude.exe -C avrdude.conf -v -v  -p atmega328p -c arduino -P COMx -b 115200 -D -U flash:w:xxx.hex:i

-v 越多打印输出的越详细,用两个-v即可
-p <部件号> - AVR处理器型号
-c 使用编程器
-P <端口> - 要烧录的usb端口
-b <波特率>
-D - 禁用闪存的自动擦除
-U <内存类型>:<操作>:<HEX文件的路径>:<格式>

在linux下执行

.\avrdude.exe -C avrdude.conf -v -v  -p atmega328p -c arduino -P /dev/ttyxxx -b 115200 -D -U flash:w:xxx.hex:i
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值