Table of Content

AT86RF401 STK500 用户界面向导

总体说明

简介

特性

器件 支持

入门指导

硬件连接

系统要求

硬件描述

AT86RF401 方框图

样品评估板

用户按键综述

SPI 端口连接

使用 AVR Studio设置开发AT86RF401

开始运行STK500 开发板

"编程"设置

"熔丝位"设置

"锁定位"设置

"高级"设置

"开发板"设置

用STK500对AT86RF401进行在线编程

故障排除向导

技术支持

例程


AT86RF401 STK500 User Interface Guide

AT86RF401 STK500 用户界面向导

AT86RF401 Smart RF transmitter 由STK500 AVR 开发板支持，我们可以用STK500 开发板来对 AT86RF401 的程序和数据存储区进行编程。

Studio 3.54 及更高版本都支持AT86RF401，AT86RF401 要求 STK500 评估板下载新的固件，当你把 Studio 连接到 STK500 后就可以对 STK500 固件进行更新。

STK500 评估板上没有AT86RF401芯片插座，所以我们需要一块带有 SPI 接口的扩展板。

介绍

特性

器件支持

入门指导

硬件连接

系统要求

硬件描述

AT86RF401 方框图

样品评估板

用户按键综述

SPI 端口连接

使用AVR Studio设置开发AT86RF401

开始运行 STK500开发板

“编程”设置

“熔丝位”设置

“锁定位”设置

“高级”设置

“开发板”设置

使用STK500对AT86RF401进行在系统编程

故障排除向导

器件支持

例程


Features

特性

•RF 的频率范围：264–456 MHz

•对匹配天线 6dBm 的RF输出

•RF 输出功率可调整到大于36dB，有1dB 的衰减

•基于锁相环(PLL) 的频率合成器

•支持 OOK 调制

•数据带宽最大达 10 Kb/s 的曼彻斯特编码

•2 Volt 的工作电压

•8-位AVR .... RISC 指令的单片机内核

•最少外部元件

•节省空间的 20-引脚的 TSSOP 封装

•2 KB (1Kx16b) Flash 程序存储区

•128 字节 EEPROM 数据存储区

•128 字节 SRAM 数据存储区

•对程序和数据存储区可在线编程 (ISP)

•六个 I/O 口 (串行 I/F接口, LED 驱动输出, 按键输入中断)

•低电压检测和掉电保护

•软件精调谐的 VCO Tank Circuit

请参看：:

器件支持

AT86RF401 系统框图

返回到索引


Device Support

器件支持

STK500 (AVR 开发板)、AT86RF401U/E/X-EK1 (评估板) 和 AVR Studio 3.54 (软件开发工具) 及其更高版本都支持AT86RF401的应用。 可以从 www.atmel.com 网站下载最新版本的 Studio。

AT86RF401 U/E/X-EK1

请参看：

特性

系统要求


Connecting the Hardware

硬件连接

要对 AT86RF401编程，必须先将 STK500 与一台 PC 相连接。参考 STK500 的帮助文档来正确连接与安装STK500 评估板。STK500 与 PC 的连接通常使用的是10-芯或6-芯ISP 缆线。

AT86RF401 评估板的1脚必须与 STK500 ISP 连接插座Header Pin Row的1脚相连。 参考 SPI 端口连接中有关引脚输出的说明。

STK500 能通过SPI引脚向AT86RF401 提供电源 Vdd。当AT86RF401由外部提供Vdd时，STK500板上的 VTARGET 短路片的必须断开。

请参看:

器件支持

样品评估板

SPI 端口连接


System Requirements

系统要求

最低的软硬件要求是：

  1. 486 处理器 (推荐使用Pentium系列)
  2. 16 MB RAM
  3. 12 MB 自由硬盘空间 (AVR Studio)
  4. Windows ® 95, Windows 98, Windows ME, Windows NT 4.0 或更高版本, 或Windows 2000
  5. 115200 波特率的 RS-232 接口 (COM 口)
  6. 10-15V 直流电源供电, 最小电流为500mA

参看:

器件支持

硬件连接


Hardware Description

硬件描述

AT86RF401 方框图


Sample Evaluation Board

样品评估板

AT86RF401 评估板是AT86RF401U/E/X-EK1 (评估板)上的一个部分，不包括在STK500 开发板内。它包括一个AT86RF401 微型发送器，一个晶振，四个输入按键，电池 (供电接口可供选择)，编程接口和一个印刷电路天线。

AT86RF401 评估板

注意：虽然板上预先留有所有元件的放置位置，但不是每个元件都需使用。不用的元件有L3, C1, C3, C4, C8, R1和 R2。以上图示的是AT86RF401E。

参看:

连接硬件

用户按键综述


Description of User Buttons

用户按键说明

按下开发板上的按键，AT86RF401 的 I/O 口将有一个低电平信号的输入。在评估板软件中I/O1 - I/O4 代表按键输入。当评估和编程时要确保 I/O1 - I/O4 设置为输入。它们可以被设置为正常输入，也可以被设置成按键输入。

上面的电原理图说明了 I/O 口的内部连接结构。其中 35k 的上拉电阻必须要接。I/O 口通过一个按键接地。

参看:

样品评估板

例程


SPI Port Connections

SPI 端口连接

STK500

评估板上的SPI 连接接口与STK 500 上的Reset, SCK, SDI, SDO 脚相连。

STK500 | AT86RF401
MOSI | SDI
RST | RESETB
SCK | SCK
MISO | SDO
VTG | DVDD
GND | DGND

AT86RF401 开发板上的 ISP 接口是锁住的，这样可以防止错误连接。而 STK500 上的 ISP 接口没有锁住。请注意要正确连接 ISP 接线。

参看:

硬件 连接

系统要求

开始运行 STK500开发板

用STK500对AT86RF401进行在系统编程


Using AVR Studio with AT86RF401

使用AVR Studio设置开发AT86RF401

这部分要介绍的是 STK500 的支持软件，并深入阐述以下给出的编程选项。

开始运行STK500开发板

按下AVR Studio 工具栏上的 [image] 键 便能启动如下图所示的STK500用户界面。

参看:

系统要求

SPI 端口连接

“编程”设置


Program Settings

“编程” 设置

编程设置有分成4个下级菜单。

器件(Devise)

在下拉菜单中可以选择器件 AT86RF401 。这个选项还有一个可以擦除已选芯片的按键，按下它可以对所选芯片的FLASH和EEPROM存储区进行擦除。

编程模式(Programming mode)

这个选项中可选择编程模式，AT86RF401 使用 ISP 模式。如果两种模式都支持的芯片，可以选其中一个模式。选择“Erase Device Before Programming”项，会使STK500在写程序到程序存储区(Flash)前先擦除芯片。选择“ verify Device After Programming”项，会使STK500在编程之后对存储区(Flash和EEPORM)进行校对。

Flash

如果STK500用户界面在打开前，AVR Studio没有创建一个工程，那么“Use Current Simulator/Emulator FLASH Memory”选项会变成灰色。如果创建了一个工程，这个选项将允许 AVR Studio 把当前装载在的在Flash存储区观察窗中的内容写入到器件中。

如果当前没有工程在运行，或源程序是放在另外的HEX文件中，那么请选择“Input HEX File”，按 [image] 键浏览或在文本框中填入绝对路径和文件名。被选文件必须是“Intel-hex”格式或“扩展Intel-hex”格式。

EEPROM

如果STK500用户界面在打开前，AVR Studio没有创建一个工程，那“"Use Current Simulator/Emulator EEPROM Memory”选项会变成灰色。如果创建一个工程，这个选项将允许 AVR Studio 把当前装载在的在EEPROM存储区观察窗中的内容写入到器件中。

如果当前没有工程在运行，或源程序是放在另外的HEX文件中，那么请选择“Input HEX File”，按 [image] 键浏览或在文本框中填入绝对路径和文件名。被选文件必须是“Intel-hex”格式或“扩展Intel-hex”格式。

请参看：

SPI 端口连接

开始运行STK500开发板

“熔丝位”设置


Fuse Settings

"熔丝位" 设置

AT86RF401 不包括熔丝位编程选项。

参看:

“编程”设置

“锁定位”设置


Lock Bits Settings

“锁定 加密位” 设置

“锁定位” 标签下列出了 AT86RF401 可以使用的锁定模式。“锁定加密位”标签列出了当前芯片所应用的加密模式。一种加密模式可能为几个溶丝位的设置组合。可以通过STK500的用户界面对“锁定加密位"进行操作，AVR Studio会自动根据所选择的加密模式对溶丝位进行正确的设置。一旦一种加密保护模式被激活，您将无法通过设置比当前低级的保护模式的溶丝位来降低加密保护等级。只有一种去除加密溶丝位设置的方法，那就是将芯片进行完整的擦除，此时程序和数据存储器都将擦除。

复选框的不同状态表示了加密溶丝位在编程模式中是否可读或是可写。

表示在此编程模式中，加密溶丝位既可读也可写。
表示在此编程模式中，加密溶丝位可读但不可写。
表示在此编程模式中，加密溶丝位可读但不可写。
表示在此编程模式中，加密溶丝位既不可写也不可读。

如果加密溶丝位在编程模式中不可读，那么在窗口中显示的值是不能相信的。

参看:

“熔丝位”设置

“高级”设置


Advanced Settings

"高级" 设置

高级设置标签通常被分成两个部分。

标识字节

通过点击“Read Signature”键，可以从芯片中读到芯片的标识字节。标识字节就是芯片的标识符。读出标识字节后，软件会检查该标识符所表示的芯片型号是否与用户所选择的一致。

AT86RF401 的标识字节是 1e 91 81 82。

内部振荡器校正字节

AT86RF401 尚不具有内部振荡自校功能。

请参看：

"锁定位"设置

"开发板"设置


Board Settings

"评估板" 设置

参考 STK500 帮助文档中的总体说明。

VTARGET

VTARGET 控制目标板的工作电压。可以通过滑动条或文本框把电压设置在2–5V间，然后按“Write Voltage”键，就可以让 STK500 工作在该电压下。

AREF

AT86RF401 不具有ADC 转换器。

振荡器

AT86RF401 评估板提供内部振荡电路。

参看:

连接硬件

样品评估板

“高级”设置


In-System Programmin

使用STK500对AT86RF401 进行在系统编程

SPI 接口

当 RESETB 接地后，程序和数据储存区都可通过串行 SPI 总线进行编程，此串行接口由 SCK, SDI (输入) 和SDO (输出) 三根线组成。

在编程前，芯片会自动擦除程序，所以没有必要首先执行擦除指令。擦除芯片操作会把 EEPROM 存储器中的数据都置成$FF。可以向 XTAL/CLK 引脚提供外部系统的时钟，也可以在 XTAL/CLK 和 XTALB 两个引脚间跨接一个晶振。串行时钟(SCK)输入的最小拉低和置高时间定义如下：

拉低：4 个晶振时钟周期 置高：16 个时钟周期

串行编程算法

参看AT86RF401 数据手册的 图 4 (15页), 图 5 (15页) 和图 6 (16页) 。若使用串行编程模式对 AT86RF401 进行编程和校验 ，推荐按以下步骤进行：

上电步骤：

1. 当 RESETB 和 SCK 是 “0”电平后，在VDD 和 GND 之间加上电源。如果在 XTAL 和 XTALB 间没有跨接晶振，则要在 XTAL 引脚接外部时钟信号。如果编程者无法保证上电过程中 SCK 始终为低电平，必须要在 SCK 是 “0”电平后向 RESETB 提供一个正向脉冲。

2. 至少等待 20 ms 再向 SDI 引脚发送编程使能指令，允许执行串行编程。必须在所有的编程/擦除操作之前执行这条指令。

3. 若正在擦除芯片，等待4ms，再给 RESETB 一个正向脉冲，并从Step 2起重新开始。

4. 在对程序存储器编程时，在相应的写指令中发出地址和数据，并且一次只能写一个字节。程序存储区在新数据写入前都会被自动擦除，下一个字节将在 4 ms后被写入。

5. 读指令可以校验任何的程序存区位置，并在串行输出端口SDO输出被选地址的内容。

6. 在编程结束后，必须置高 RESETB 才能开始正常的操作。

参看:

SPI 端口连接

STK500 开发板


Trouble Shooting Guide

故障排除向导

问题 | 原因 | 解决办法
警告：执行指令过程中产生问题 | 没有提供外部 VDD且VTARGET 短路片未连接 | 短接 VTARGET 短路片或向 AT86RF401提供外部电源
 | AT86RF401 没有接ISP 缆线 | 重新接上 ISP 的编程电缆
 | ISP 缆线没有正确连接到ISP 连接接口上 | 确保 ISP 连接接口1 脚与ISP 缆线的1脚相连
无法做到硬件同步。关闭电源再打开，再试一次。 | STK500 没有连接 Vdd | 参考STK500 的故障排除向导
警告：FLASH 内容与文件内容不同...FAILED! | 器件选择错误 | 核实 AT86RF401 为所选器件
警告：标识与被选器件不匹配！ | 器件选择错误 | 核实 AT86RF401 为所选器件

注意： 对于 STK500 的故障问题请参考 STK500 的用户向导。

参看:

硬件连接

SPI 端口连接

技术支持


Technical Support

技术支持

寻求技术支持请按以下方式联系：

Toby Prescott (应用工程师)

(719)540-6947

tprescott@cso.atmel.com

Jim Goings (市场部经理)

(719)540-6873

jgoings@cso.atmel.com


Sample Software

例程

;****************************************************************************************

;* Part Number: AT86RF401

;* File Name: CW Mode.asm

;* Description: This program transmits in CW mode for the duration of the button press.

;* The user can, if desired, change the output power attenuation by changing the

;* ATTENUATION variable in the User Defined Constants section.

;****************************************************************************************

;* I/O Register Definitions per AT86RF401 spec

;****************************************************************************************

SREG EQU 0x3F ; Status

SPH EQU 0x3E ; Stack Pointer High

SPL EQU 0x3D ; Stack Pointer Low

BL_CONFIG EQU 0x35 ; Battery Low Configuration

B_DET EQU 0x34 ; Button Detect

AVR_CONFIG EQU 0x33 ; AVR Control

IO_DATIN EQU 0x32 ; I/O Data In

IO_DATOUT EQU 0x31 ; I/O Data Out

IO_ENAB EQU 0x30 ; I/O Enable

WDTCR EQU 0x22 ; Watchdog Timer Control

BTCR EQU 0x21 ; Bit Timer Control

BTCNT EQU 0x20 ; Bit Timer Count

DEEAR EQU 0x1E ; Data EEPROM Address

DEEDR EQU 0x1D ; Data EEPROM Data

DEECR EQU 0x1C ; Data EEPROM Control

LOCKDET2 EQU 0x17 ; Lock Detector Configuration Register 2

VCOTUNE EQU 0x16 ; VCO Tuning Register

PWR_ATTEN EQU 0x14 ; Power Attenuation Control Register

LOCKDET1 EQU 0x10 ; Transmitter Control Register

TX_CNTL EQU 0x12 ; Lock Detector Configuration Register 1

SRAM_START EQU 0x0060 ; Start of RAM

SRAM_END EQU 0x00DF ; End of RAM

;****************************************************************************************

;* Define global registers

;****************************************************************************************

#define XL R26

#define XH R27

#define YL R28

#define YH R29

#define ZL R30

#define ZH R31

;****************************************************************************************

;* Constants

;****************************************************************************************

DATA_1 EQU 0x30 ; VCO on, PA on => RF out

DATA_0 EQU 0x20 ; VCO on, PA off => RF off

VCO_OFF EQU 0x00 ; VCO off, PA off => RF off

CLEAR_BUTTONS EQU 0x00 ; Clears buttons

BPRESS_MASK EQU 0x3E ; Mask to check for button press

;****************************************************************************************

;* User Defined Constants

;****************************************************************************************

ATTENUATION EQU 0x00 ; 0x00=0dBm, 0x01=1dBm, 0x02=2dBm, 0x03=3dBm

; 0x04=4dBm and 0x05=5dBm

;****************************************************************************************

;* Routine: Reset

;* Calls: None

;* Description: Reset boot location.

;****************************************************************************************

ORG 0x00 ; Program start

Reset:

RJMP ResetAvrClock ; AVR requires Jump for initial instruction

ResetAvrClock:

LDI R16,0x60 ; Set AVR clock for xtal/16

OUT AVR_CONFIG,R16

ResetStackPointer:

LDI R16,low(SRAM_END) ; Stack Pointer low address

OUT SPL,R16

LDI R16,high(SRAM_END) ; Stack Pointer high address

OUT SPH,R16

RCALL VcoTune

RJMP Main

;****************************************************************************************

;* Subroutine: Main

;* Calls: Setup, Sleep, Tx, TxOff

;* Description: The routine calls the main subroutines for program execution.

;****************************************************************************************

Main:

RCALL Setup ; Initialize the part

RCALL Sleep ; Go to sleep and wait for button press

RCALL Tx ; Wakeup and TX in CW Mode

RCALL TxOff ; Shut off Tx

RJMP Main ; Go to sleep and wait for button press

;****************************************************************************************

;* Subroutine: Setup

;* Calls: None

;* Description: This routines configures the AVR clock, stack pointer and the I/O.

;****************************************************************************************

Setup:

PUSH R16 ; Save the stack

CLR R16

SetupButtons:

LDI R16,0x40 ; Setup I/O 0-5 as inputs and batt. low hysterysis to low

OUT IO_ENAB,R16

LDI R16,0x3E ; Setup I/O 1-4 as buttons

OUT IO_DATOUT,R16

LDI R16,0x00 ; Clear buttons

OUT B_DET,R16

SetupAttenuation:

LDI R16,ATTENUATION ; Set power attenuation

OUT PWR_ATTEN,R16

POP R16 ; Restore the stack

RET

;****************************************************************************************

;* Subroutine: Sleep

;* Calls: None

;* Description: This routine places the transmitter into sleep mode. The part will wake

;* up on any button press of buttons 1-4 (IO1-4).

;****************************************************************************************

Sleep:

PUSH R16 ; Save the stack

CLR R16

LDI R16,0x62 ; Place tx into sleep mode and set clock to xtal/16

OUT AVR_CONFIG,R16

POP R16 ; Restore the stack

RET

;****************************************************************************************

;* Subroutine: Vcotune

;* Description: This routine tunes the VCO. The VCOTUNE register is loaded

;* with the tuning cap value and then the PLL is checked for Lock.

;* If not Locked, keep looping until the last cap value is checked

;* (0x1F). If Locked, check the state of the VCODET comparators.

;* When a valid window comparator state is found (0x00), stop

;* tuning, this is the tuning cap value. Otherwise, keeping checking

;* until the last tuning cap state. The tuning cap value is placed

;* into R18 for later use. R18 is written to 0xFF is a valid tuning

;* cap value is not found.

;****************************************************************************************

VcoTune:

PUSH R16 ; Save the stack

PUSH R17

VcoTuneEnable:

LDI R16,0x30 ; Turn on the VCO and PA

OUT TX_CNTL,R16

CLR R16 ; Temp. counter for switch caps

VcoTuneCap:

OUT VCOTUNE,R16 ; Load vcotune reg. with cap value, Initially zero

CPI R16,0x20 ; If last cap value, stop tuning

BREQ VcoTuneNoCap ; Unable to tune VCO with current LC combination

INC R16 ; Increment switch cap counter

RCALL LockDetWait ; Wait for PLL to settle

VcoTuneLockCheck:

IN R17,TX_CNTL ; Check for PLL Lock

ANDI R17,0x04 ; If PLL locked, continue, otherwise loop again

BREQ VcoTuneCap

VcoTuneWindowCheck:

MOV R18,R17 ; Put the tuning cap value into R18 for later use

IN R17,VCOTUNE ; Read the state of the Vdet comparators

ANDI R17,0xC0 ; Check for valid Vdet window (0x00)

BRNE VcoTuneCap ; If not in valid window or locked, keeping checking

RJMP VcoTuneEnd ; Valid cap value found

VcoTuneNoCap:

LDI R18,0xFF ; R18 = 0xFF, indicates not tuned

VcoTuneEnd:

CLR R16 ; Turn off the VCO and PA

OUT TX_CNTL,R16

POP R17 ; Restore the stack

POP R16

RET

;****************************************************************************************

;* Subroutine: LockDetWait

;* Description: This routine supplies a delay to allow the VCO settle. The

;* routine will check for a valid Lock signal or wait 100us (based

;* a 1.2uS cycle instruction), whichever comes first.

;****************************************************************************************

LockDetWait:

PUSH R16 ; Save the stack

PUSH R17

LockDetWaitSetup:

LDI R16,0x07 ; Enable lock detect: 4 cycle slips with Black Out disabled

OUT LOCKDET1,R16

LDI R16,0x85 ; Enable Unlock detect: 256 cycles w/out slip

OUT LOCKDET2,R16

LockDetWaitEnable:

LDI R16,0x0D ; Load counter with LD wait value

LockDetWaitLoop:

IN R17,TX_CNTL ; Read the Lock bit

ANDI R17,0x04 ; If Lock set, stop checking

BRNE LockDetWaitDone

DEC R16 ; Decrement counter & loop until 0

BRNE LockDetWaitLoop

LockDetWaitDone:

POP R17 ; Restore the stack

POP R16

RET

;****************************************************************************************

;* Subroutine: Tx

;* Calls: None

;* Description: This Routine modulates the transmitted output at the desired frequency.

;****************************************************************************************

Tx:

PUSH R16 ; Save the stack

CLR R16

TxRf:

LDI R16,DATA_1 ; Turn on RF output

OUT TX_CNTL,R16

TxMore:

LDI R16,CLEAR_BUTTONS ; Clear buttons for next press

OUT B_DET,R16

IN R16,B_DET ; Scan buttons

ANDI R16,BPRESS_MASK ; If button pressed, continue CW Mode

BRNE TxRf

POP R16 ; Restore the stack

RET

;****************************************************************************************

;* Subroutine: TxOff

;* Calls: None

;* Description: This Routine shuts off the VCO and prepares the TX for Sleep Mode.

;****************************************************************************************

TxOff:

PUSH R16 ; Save the stack

CLR R16

LDI R16,VCO_OFF ; Turn off VCO

OUT TX_CNTL,R16

LDI R16,CLEAR_BUTTONS ; Clear buttons for next press

OUT B_DET,R16

POP R16 ; Restore the stack

RET

END