[FabNotes17]作业8:刻板焊接烧程序 | Week8 - Embedded Programming

这周的作业是

阅读一款微处理器的说明

制作电路板并编写程序使其运行

第一轮尝试: 自己制作 ISP

ISP 是为 AVR 芯片制作的编程器,这里有详细的 DIY ISP 教程

依着教程画葫芦:

  • 下载安装 Crosspack AVR

  • Get Make

  • 下载固件 FabISP Firmware for MacOS 10.8.2

  • 解压固件,命令行进入解压后的目录

  • 用编辑器打开 Makefile

  • 将模式由 "avrisp2" 改为 "usbtiny"

    也就是找到以下代码,将注释转移到 “avrisp2”那一行,然后保存文件

AVRDUDE = avrdude -c usbtiny -p $(DEVICE) # edit this line for your programmer

AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # edit this line for your programmer
```

  • 命令行进入固件目录,输入命令 make clean

    如果正常,将返回结果 rm -f main.hex main.lst main.obj main.cof main.list main.map main.eep.hex main.elf *.o usbdrv/*.o main.s usbdrv/oddebug.s usbdrv/usbdrv.s

    但是这时出现了错误:

kidults-NMB:fabISP_mac.0.8.2_firmware kidult$ make hex
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
make: avr-gcc: No such file or directory
make: *** [usbdrv/usbdrv.o] Error 1
```
好吧,忘记插我的 FabISP 到电脑了……插好后再试,ok 的:

![](http://upload-images.jianshu.io/upload_images/149-b88a11bbdeaf758e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 下一步,需要设置 fuse,让板子能使用外部的 clock :输入命令 make fuse

    又出现了错误:

    avrdude -c usbtiny -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
    avrdude: Error: Could not find USBtiny device (0x1781/0xc9f)
    avrdude done.  Thank you.
    make: *** [fuse] Error 1
    

    查了一圈 google,搞不明白为什么。似乎是 GCC 编译问题,或者是我的板子有问题。第一轮尝试以失败告终。

第二轮尝试: 使用现成的 USBtinyISP

首先,下载 hello.ftdi.44.echo.c, hello.ftdi.44.echo.c.make 。然后将板子连接到 USBtinyISP:

此处需要吐槽一下 New MacBook,只有一个 typeC 接口,一开始 USBtinyISP 接上去灯不亮,以为是我的 typeC 转接口坏了。试了大半个晚上后放弃。第二天试了一下连在另一台 MacBook Pro 上,USBtinyISP 的灯又亮了。插回到 New MacBook,依然不亮,怀疑是不是数据线坏了,又折腾半个晚上。偶然间又发现,充满电再插 USBtinyISP 会亮……所以问题可能出在 typeC 转接口对 USB 供电不足……

折腾两三个晚上,终于到下一步。命令行进入前面下载好的两个文件的目录,输入命令:
make -f hello.ftdi.44.echo.c.make

Make 成功了。然后是 sudo make -f hello.ftdi.44.echo.c.make program-usbtiny-fuses

又出现错误提示:

avr-objcopy -O ihex hello.ftdi.44.echo.out hello.ftdi.44.echo.c.hex;\
    avr-size --mcu=attiny44 --format=avr hello.ftdi.44.echo.out
AVR Memory Usage
----------------
Device: attiny44

Program:     758 bytes (18.5% Full)
(.text + .data + .bootloader)

Data:         64 bytes (25.0% Full)
(.data + .bss + .noinit)


avrdude -p t44 -P usb -c usbtiny -U lfuse:w:0x5E:m

avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

make: *** [program-usbtiny-fuses] Error 1

又开始到处 Google。查看了一下 fuse 的含义

What are the fuses?

There are 3 bytes of permanent storage in the chip called 'fuse low byte', 'fuse high byte' and 'fuse extended byte'. These bytes are called fuses and can be reprogrammed as many times as you want and determines the behaviour of the chip. To do that, their value is not erased when the chip is powered off or reprogrammed.

Each microchip has its own definition for the values that must have the fuses.

将错误信息复制到 Google,找到了之前的fab note。里面让安装FTDI 芯片的驱动。然并卵,安装好驱动依然是错误提示。

肯定是板子出问题了。需要去实验室重新刻板子和焊电路。但是实验室扩建装修中,一眨眼几个星期就过去了………………

第三轮尝试

终于盼到实验室重新开放,在空气质量500的房间中刻板子,然后搜刮了元器件回家打算自己焊。好不容易把东西凑齐,开工后发现焊锡太粗太劣质,根本没法焊。重新买了焊锡线,开工后崩溃地发现,电烙铁没有买配焊台的,调不了温度,焊枪温度太高,很容易把板子上面的铜面焊焦了。可好的板子都用完了,还是没有重新作出电路板来。

等到周末,又去到实验室老老实实刻板子,焊元件。

电路板完成后,连上 USBtinyISP,终于 fuse 成功:

下一步

make -f hello.ftdi.44.echo.c.make program-usbtiny

现在,可以将程序烧录到板子上了。

照着教程下载 term.py,输入命令 python term.py /dev/ttyUSB0 115200,继续是熟悉的错误提示:

Traceback (most recent call last):
  File "term.py", line 89, in <module>
    ser = serial.Serial(port,speed)
  File "/Library/Python/2.7/site-packages/serial/serialutil.py", line 180, in __init__
    self.open()
  File "/Library/Python/2.7/site-packages/serial/serialposix.py", line 294, in open
    raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'

已经处在崩溃边缘,实验室的小伙伴提醒我用 Arduino 去烧程序。于是振作着继续尝试:

  1. 添加板子

    打开 Arduino 的设置,在 "Additional Boards Manager URLs:" 里填上

    https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

    然后找到菜单里的 “Tools > Board” ,打开 boards manager 。滚到列表底部,可以看到 “ATtiny”.


    安装,然后关闭 boards manager。

  2. 设置

    设置 board:"ATtiny", Processor:"ATtiny44", Clock:"20 MHz", Port:"USB"

  3. 修改程序

    Load Arduino 自带的 Blink example, 把 13 号引脚改为 7:

  4. Burn Bootloader

  5. 成功了!


一周的作业用了快两个月才完成…………


参考资料

课程资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容