风筝
发表于: 2018-12-24 20:18:15 | 显示全部楼层

所有微控制器都需要某种机制来对它们进行编程,即使它们只编程一次。通常,程序代码写在主机上,然后编译或翻译,并使用电缆(通常是USB或RS232)将对象(机器可读)代码从PC(“主机”)下载到MCU(“目标”),通常被称为“编程器”。一旦编程,MCU就像编码一样工作。


一个非常受欢迎的MCU开发板制造商是Arduino,总部位于意大利。许多Arduino开发板都装有AVR微控制器,这也需要烧写器将主机上创建的程序保存到目标MCU的存储器中,例如AVR微控制器。外部编程器通常用于AVR微控制器,并且成本高昂。


在项目开发期间,大多数目标MCU必须进行多次编程,因此将MCU从电路中移除以对其进行编程是不可行的。许多MCU(包括AVR处理器)都可以使用系统内编程器(ISP)进行编程,因此无需将其从电路板上移除。


默认情况下,Arduino板带有MCU预置代码,称为引导加载程序。 Bootloader是第一个在启动MCU时驻留在MCU中的程序。 Bootloader指示MCU加载或下一步做什么。 Arduino通过集成开发环境(IDE)使PC主机与板载MCU(目标)之间的通信变得易于使用。 IDE是主机驻留的,包括开发人员可用于编程、编译和调试目标MCU的工具。


引导加载程序还使用USB帮助Arduino IDE和Arduino开发板之间的通信。引导加载程序负责在从Arduino IDE到达时在芯片上编写代码。


Arduino开发板的整体设计使其易于使用,包括免费软件工具。 Arduino控制器板非常适合从嵌入式编程开始,通常用于教育环境。 Arduino开发板(目标)与主机之间的简单USB连接使Arduinos适合开发嵌入式项目,而无需了解如何将程序代码放入MCU并从那里运行代码。Arduino称程序或代码为“草图”。Arduino开发板最适合小规模项目。


然而,如果目标是设计一种经济的产品,然后创建使用上的定制设计的印刷电路板的AVR单片机比购买填充了相同的AVR MCU的Arduino板的数百或数千便宜高容量,生产质量板。然而,许多人已经使用Arduino(和类似的)低成本开发板作为安装的最终产品,如果避免创建和填充少量PCB的成本更低。


Arduino板具有少量通用I / O,可用于多种不同用途。例如,Arduino板可以作为使用Arduino ISP的其他AVR微控制器的编程器工具,并且是用于编程AVR MCU的最简单和最便宜的方法之一。 Arduino系统内编程器是免费的Arduino IDE中提供的内置函数。 ISP允许您使用专用于此目的的另一个Arduino板对Arduino板和其他AVR微控制器进行编程。


然而,使用功能齐全的Arduino板(作为编程器-Arduino)对新开发的Arduino板进行编程有一些规定。首先,必须将“programmer-Arduino”(您已配置为程序员的Arduino)配置为ISP。默认情况下,草图(代码)在Arduino IDE的“文件”菜单中的示例代码中可用。 Arduino ISP草图将所需的指令传递给Programmer-Arduino,以便在编程模式下进行设置。

Figure-1-Arduino-ISP.jpg

图1:Arduino ISP草图选项。

Figure-2-Arduino-ISP-Sketch.jpg

图2:Arduino ISP草图。


可以使用连接的LED监控Programmer-Arduino的状态,如图所示。 Arduino ISP草图已针对此功能进行了预编程。

Figure-3-Arduino-LEDs-connection.jpg

图3:Arduino-LED连接。


引脚7 =编程(编程时点亮)

引脚8 =错误(编程错误时亮灯)

引脚9 =心跳(一旦编程器上电就保持开启状态)


配置Programmer-Arduino后,Programmer-Arduino和Arduino目标之间的连接就建立起来了。引脚配置需要完全按照Arduino ISP草图中的说明进行。
Arduino ISP使用串行外设接口(SPI)协议进行通信,以编程AVR微控制器。 SPI通信使用4个逻辑信号:MOSI,MISO,SCLK和SS。除I2C外,SPI是MCU最常用的通信模式之一。 SPI遵循主从架构,这意味着主设备可以使用相同的数据引脚与多个从设备通信,并且使用从选择线选择目标从设备。如果有存储卡,则从选择用于在多个芯片中选择特定芯片。但是,当您使用Arduino作为编程工具时,从选择信号仅用于复位微控制器。重置微控制器处于接受来自程序员Arduino的命令的状态。 [IV]


在Programmer-Arduino上,引脚10、11、12和13用作数据引脚。配置如下:

引脚10 =复位

引脚11 = MOSI

引脚12 = MISO

引脚13 = SCK


可以从Programmer Arduino连接5v和接地引脚。必须连接两个Arduinos的参考地,以避免遇到故障并保持安全。


在线串行编程(ICSP)是在不断开电路的情况下对微控制器进行编程的能力。 ICSP插头在Arduino板上以6引脚的形式实际可用。将目标Arduino的引脚11、12和13与编程器Arduino的引脚11、12和13相连。注意,编程器Arduino的引脚10应该连接到目标Arduino的复位引脚。或者,ICSP插头引脚可用于SPI通信。 (见图4)。

Figure-4-Arduino-ICSP-HEADER.jpg

图4:Arduino ICSP插头。


在连接上面的所有内容之后,您需要定义您正在使用主机PC上的Programmer模式。转到菜单中的Tools,然后在“Programmer”选项中选择“Arduino as ISP”。 (见图5)。

Figure-5-Arduino-as-ISP.jpg

图5:设置编程器Arduino作为ISP


接下来,将引导加载程序加载到目标Arduino的内存中,然后定义“保险丝”。在Arduino-land中,保险丝是一组用于在微控制器中定义多个功能的指令。例如,芯片频率和时钟源在熔丝中定义。微控制器对工作电压很敏感,如果电压电平低于规定值,微控制器可能会发生故障。最小工作电压也在保险丝内定义。


如果要配置Programmer-Arduino以使其与Arduino IDE兼容以进行直接草图上传,则上述步骤是必不可少的。 “burn bootloader”选项也位于工具菜单中,并将引导加载程序刻录到目标Arduino(参见图6)。

Figure-6-Burn-Bootloader.jpg

图6:Burn Bootloader选项


如果微控制器或Arduino开发板可以与Arduino IDE程序通信,则有各种优点,例如能够使用Arduino IDE的串行监视器在运行时检查结果。 (串行监视器在单独的窗口中打开,充当接收和发送串行数据的独立终端。)


如果没有在微控制器中加载引导加载程序,它将无法使用Arduino的功能,也无法与Arduino IDE进行通信。引导加载程序会占用部分内存。在某些情况下,不需要使用Arduino IDE,因此不需要对引导加载程序进行编程。如果未编程引导加载程序,则可以为主程序草图释放更多内存。例如,在Arduino UNO中,总内存大小为32 KB,并为引导加载程序分配0.5 KB内存。 如果未安装引导加载程序,则主程序草图的总可用内存更大。


Arduino开发板非常适合学习和尝试新想法。由于Arduino是开源的,包括硬件设计原理图和Gerber文件,任何人都可以复制Arduino,修改它,并在商业环境中使用,如果他们愿意的话。 Arduino不仅仅是一头摇钱树,而是一种爱的劳动,重新定义了嵌入式硬件的传递方式。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-25 13:54 , Processed in 0.040601 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表