AN4624 Application note

Similar documents
UM2045 User manual. Getting started with the X-CUBE-NFC3 near field communication transceiver software expansion for STM32Cube.

Getting started with X-CUBE-LED channel LED driver software expansion based on LED1642GW for STM32Cube

Getting started with the X-CUBE-NFC5 high performance HF reader / NFC initiator IC software expansion for STM32Cube

Bluetooth low energy profiles for the X-CUBE-BLE1 expansion for STM32Cube. Description

Getting started with the X-CUBE-IKA02A1 multifunctional software expansion for STM32Cube

Getting started with the X-CUBE-53L1A1 Time-of-Flight long distance ranging sensor software expansion for STM32Cube

Getting started with the FP-NET-6LPBLE1 function pack for 6LoWPAN IoT node connection to a smartphone via BLE interface

NUCLEO-L433RC-P NUCLEO-L452RE-P

Getting started with the FP-IND-PLCWIFI1 function pack for PLC management via Wi-Fi

P-NUCLEO-USB001. STM32 Nucleo pack for USB Type-C and Power Delivery. Features. Description

NUCLEO-L496ZG. STM32 Nucleo-144 board. Features. Description

Getting started with the FP-SNS-ALLMEMS1 Bluetooth low energy and sensors software expansion for STM32Cube

P-NUCLEO-USB001. STM32 Nucleo pack for USB Type-C and Power Delivery Data brief. Features. Description

UM1853 User manual. STM32CubeF1 Nucleo demonstration firmware. Introduction

USB Type-C and Power Delivery Nucleo pack with NUCLEO-F072RB expansion board based on STUSB1602. Description

USB Type-C and Power Delivery Nucleo pack with NUCLEO-F072RB expansion board based on the STUSB1602

Getting started with the STM32 Nucleo pack for USB Type-C and Power Delivery with the Nucleo-F072RB board and the STUSB1602

Getting started with MotionPM real-time pedometer library in X-CUBE-MEMS1 expansion for STM32Cube

Getting started with osxmotiongc gyroscope calibration library for X-CUBE-MEMS1 expansion for STM32Cube

UM2350. Getting started with MotionPW real-time pedometer for wrist library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

UM2276. Getting started with MotionSD standing vs sitting desk detection library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

Getting started with MotionPM real-time pedometer library in X CUBE-MEMS1 expansion for STM32Cube

32F412GDISCOVERY. Discovery kit with STM32F412ZG MCU. Features. Description

STSW-BLUENRG1-DK. BlueNRG-1, BlueNRG-2 DK SW package

EVALKITSTKNX. Miniature transceiver STKNX evaluation and development kit. Features

UM2194. Getting started with MotionAW activity recognition for wrist library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

UM1727 User manual. Getting started with STM32 Nucleo board software development tools. Introduction

Getting started with the X-CUBE-SPN2 two-axis stepper motor driver software expansion for STM32Cube

Getting started with VL53L0X ranging and gesture detection sensor software expansion for STM32Cube

UM2192. Getting started with MotionMC magnetometer calibration library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

Getting started with MotionAR activity recognition library in X-CUBE-MEMS1 expansion for STM32Cube

32F469IDISCOVERY. Discovery kit with STM32F469NI MCU. Features. Description

Getting started with the X-CUBE-MEMS1 motion MEMS and environmental sensor software expansion for STM32Cube

UM2495. High performance HF reader / NFC initiator IC software expansion for NUCLEO-8S208RB. User manual. Introduction

Getting started with the X-CUBE-SPN3 high power stepper motor driver software expansion for STM32Cube

Getting started with MotionMC magnetometer calibration library in X-CUBE-MEMS1 expansion for STM32Cube

Getting started with MotionAR activity recognition library in X-CUBE-MEMS1 expansion for STM32Cube

P-NUCLEO-53L1A1. VL53L1X nucleo pack with X-NUCLEO-53L1A1 expansion board and STM32F401RE nucleo board. Description. Features

P-NUCLEO-53L0A1. VL53L0X Nucleo pack with ranging, gesture detection sensor expansion board and STM32F401RE. Description. Features

Quick Start Guide. Dynamic NFC/RFID tag IC expansion board based on ST25DV04K for STM32 Nucleo (X-NUCLEO-NFC04A1) Version 1.

Getting started with STEVAL-IDB007V1 and STEVAL-IDB008V1 evaluation boards

STM32L4R9I-EVAL. Evaluation board with STM32L4R9AI MCU. Features

UM2216 User manual. Getting started with MotionFA fitness activity library in X CUBE MEMS1 expansion for STM32Cube. Introduction

Getting started with the software package for L6474 stepper motor driver X-CUBE-SPN1 expansion for STM32Cube

Getting started with the digital MEMS microphone expansion board based on MP34DT01-M for STM32 Nucleo

32F746GDISCOVERY. Discovery kit with STM32F746NG MCU. Features. Description

Quick Start Guide (V1.0 May2015) Dynamic NFC tag expansion board based on M24SR for STM32 NUCLEO (X-NUCLEO-NFC01A1)

STM32H7x3I-EVAL. Evaluation board with STM32H7x3XI MCUs. Data brief. Features

Getting started with FP-SNS-6LPNODE1 software for IoT sensor node connection to 6LoWPAN networks using sub-1ghz RF

32L476GDISCOVERY. Discovery kit with STM32L476VG MCU. Features. Description

Getting started with X-NUCLEO-IHM06A1 low voltage stepper motor driver expansion board based on STSPIN220 for STM32 Nucleo

X-NUCLEO-53L1A1. Long distance ranging Time-of-Flight sensor expansion board based on VL53L1X for STM32 Nucleo. Description.

P-NUCLEO-IKA02A1. STM32 Nucleo pack: electrochemical toxic gas sensor expansion board with CO sensor. Description. Features

Getting started with the STSW-BCNKT01 software package for STEVAL-BCNKT01V1 based on STM32Cube

How to upgrade the firmware on the STEVAL-USBC2DP USB Type-C to DisplayPort adapter

Getting started with osxmotionar activity recognition library for X-CUBE-MEMS1 expansion for STM32Cube

X-NUCLEO-53L0A1. Ranging and gesture detection sensor expansion board based on VL53L0X for STM32 Nucleo. Description. Features

Getting started with osxmotionmc magnetometer calibration library for X-CUBE-MEMS1 expansion for STM32Cube

STSW-BNRG-Mesh. Mesh over Bluetooth low energy. Features. Description. Applications

Running a simple 6LowPAN network consisting of one receiver node and one or more sensor nodes in a Sub-1GHz RF band

UM2051 User manual. Getting started with the STM32 Nucleo pack for USB Type-C and Power Delivery. Introduction

AN4515 Application note

Getting started with osxacousticsl real-time sound source localization software expansion for STM32Cube

Quick Start Guide. High power stepper motor driver expansion board based on powerstep01 for STM32 Nucleo (X-NUCLEO-IHM03A1)

IoT node with BLE connectivity, digital microphone, environmental and motion sensors, motion and audio middleware libraries.

STSW-BNRGUI. BlueNRG GUI SW package. Data brief. Features. Description

TN1235 Technical note

Using the GPIOs and interrupt controller to drive LEDs on STM8 Nucleo-64 boards

UM2084 User manual. Getting started with the ultra-low-power STM32 and LoRa Nucleo pack. Introduction

Getting started with the software package for STEVAL-STLKT01V1 based on STM32Cube

UM1862 User manual. Getting started with STM32F411E Discovery software Development Tools. Introduction

Getting started with the software package for digital MEMS microphones in X-CUBE-MEMSMIC1 expansion for STM32Cube

P-NUCLEO-6180X2. Proximity, gesture, ambient light sensor expansion board based on VL6180X for STM32L053R8. Description. Features

Version (Apr 28, 2016)

UM2375 User manual. Linux driver for the ST25R3911B/ST25R391x high performance NFC frontends. Introduction

Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo. Description

RN0084 Release note. ST-LINK/V2 firmware upgrade. About this release note

Quick Start Guide. Dual-channel high side driver expansion board based on VPS2535H for STM32 Nucleo (X-NUCLEO-IPS02A1) Version 1.0 (Sept.

Quick Start Guide. Long distance ranging ToF sensor expansion board based on VL53L1X for STM32 Nucleo (X-NUCLEO-53L1A1) Version (February 20, 2018)

Quick Start Guide. Bipolar stepper motor driver expansion board based on L6208 for STM32 Nucleo (X-NUCLEO-IHM05A1) Version 1.1.

ST25DV-DISCOVERY. Discovery kit for the ST25DV04K dynamic NFC/RFID tag. Features

X-NUCLEO-NFC04A1. Dynamic NFC/RFID tag IC expansion board based on ST25DV04K for STM32 Nucleo. Description. Features

Getting started with the ultra-low-power STM32 and LoRa Nucleo pack

UM1677 User manual. Getting started with STM32F030 Value Line Discovery development tools. Introduction

Quick Start Guide. Stepper motor driver expansion board based on L6474 for STM32 Nucleo (X-NUCLEO-IHM01A1) Version 1.2.

Quick Start Guide. STM32 ODE Function Pack for Building a PLC controlled via Wi-Fi (FP-IND-PLCWIFI1) Version 1.1 (Oct 16, 2017)

Getting started with the P-NUCLEO-IKA02A1 STM32 Nucleo pack for electrochemical toxic gas sensor expansion board with CO sensor

UM1641 User manual. Sampling rate conversion SRC236 library software expansion for STM32Cube. Introduction

Quick Start Guide. Sound terminal expansion board based on STA350BW for STM32 NUCLEO (X-NUCLEO-CCA01M1) Version 1.1.

Getting started with X-NUCLEO-53L1A1 long distance ranging ToF sensor expansion board based on VL53L1X for STM32 Nucleo

Quick Start Guide. Stepper motor driver expansion board based on L6474 for STM32 Nucleo (X-NUCLEO-IHM01A1) Version 1.

AN4749 Application note

X-NUCLEO-53L0A1 ranging and gesture detection sensor expansion board based on VL53L0X for STM32 Nucleo

DT0095 Design tip. Datalogging the SensorTile through a PC. Purpose and benefits. Description

Quick Start Guide. STM32 ODE Function Pack for connecting 6LoWPAN IoT Nodes to smartphone through a BLE interface (FP-NET-6LPBLE1)

AN4045 Application note

Getting started with the X-NUCLEO-IHM14A1 stepper motor driver expansion board based on STSPIN820 for STM32 Nucleo

Quick Start Guide. Bluetooth low energy, sensors and NFC tag software for STM32Cube (BLUEMICROSYSTEM3) Version (September 15, 2016)

EVALKIT-VL6180X. VL6180X plug-in and STM32 F401RE Nucleo board explorer kit. Description. Features

STM32 embedded target for MATLAB and Simulink release 3.1. Summary for STM32 embedded target for MATLAB and Simulink release 3.1:

Transcription:

Application note Getting started with the STM32 Nucleo and the M24SR expansion board X-NUCLEO-NFC01A1 Introduction This document describes how to develop a M24SR based application using the STM32 Nucleo platform and the M24SR expansion board (X-NUCLEO-NFC01A1), within the STM32Cube software environment (X-CUBE-NFC1). The M24SR expansion board is a dynamic NFC tag board with a 64kbits M24SR device and 3 LEDs. Table 1. Applicable firmware and tool Type Part number Firmware Tool X-CUBE-NFC1 X-NUCLEO-NFC01A1 December 2014 DocID027186 Rev 1 1/17 www.st.com 1

Contents AN4624 Contents 1 References................................................. 5 2 Acronyms and abbreviations.................................. 6 3 Getting started.............................................. 7 3.1 Hardware description......................................... 7 3.1.1 STM32F401RE Nucleo...................................... 7 3.1.2 M24SR expansion board..................................... 8 3.2 Software description.......................................... 9 3.2.1 STM32Cube............................................... 9 3.2.2 Firmware for STM32 Nucleo with X-NUCLEO-NFC01A1 expansion board.................................................... 9 3.3 Hardware software and system setup............................ 9 3.3.1 Hardware setup............................................ 9 3.3.2 Software setup............................................ 10 3.3.3 System setup guide........................................ 11 4 Software overview.......................................... 12 4.1 Software architecture........................................ 12 4.2 STM32Cube HAL........................................... 12 4.3 Board support package (BSP)................................. 13 4.4 Middleware............................................... 13 5 Guide for writing application................................. 14 5.1 Relevant APIs for M24SR application........................... 14 5.1.1 Initialization.............................................. 14 5.1.2 Writing data to M24SR expansion board........................ 15 5.2 Application description....................................... 15 6 Revision history........................................... 16 2/17 DocID027186 Rev 1

List of tables List of tables Table 1. Applicable firmware and tool................................................. 1 Table 2. Acronyms and abbreviations................................................ 6 Table 3. Document revision history................................................. 16 DocID027186 Rev 1 3/17 3

List of figures AN4624 List of figures Figure 1. STM32-F4 Nucleo board................................................... 7 Figure 2. X-NUCLEO-NFC01A1 M24SR expansion board................................. 8 Figure 3. Keil µvision installed version............................................... 10 Figure 4. STM32 packages for Keil µvision............................................ 10 Figure 5. Software architecture..................................................... 12 4/17 DocID027186 Rev 1

References 1 References [1]: STMicroelectronics databrief X-CUBE-NFC1, STM32Cube expansion software for X- NUCLEO-NFC01A1 Expansion Board. [2] STMicroelectronics databrief X-NUCLEO-NFC01A1, Dynamic NFC tag expansion board based on M24SR for STM32 Nucleo. DocID027186 Rev 1 5/17 16

Acronyms and abbreviations AN4624 2 Acronyms and abbreviations Table 2. Acronyms and abbreviations Acronym Description BSP GUI HAL I 2 C IDE LED Board support package Graphical user interface Hardware abstraction layer Inter-integrated circuit Integrated development environment Light emitting diode 6/17 DocID027186 Rev 1

Getting started 3 Getting started 3.1 Hardware description This section describes the hardware components needed for developing a M24SR based application. The X-NUCLEO-NFC01A1 expansion board is compatible with all the STM32 Nucleo boards. In this document the STM32F401RE Nucleo board is used as an example. The following sub-sections describe the individual components. 3.1.1 STM32F401RE Nucleo STM32F401RE Nucleo board belongs to STM32F401xD/xE family which is based on the high-performance ARM Cortex -M4 32-bit RISC core operating at a frequency of up to 84 MHz. The Cortex-M4 with FPU core features a single precision floating point unit (FPU) which supports all ARM single-precision data-processing instructions and data types. It also implements a full set of DSP instructions and a memory protection unit (MPU) which enhances application security. It provides an affordable and flexible way for users to try out new ideas and build prototypes with any STM32 microcontroller lines. The Arduino connectivity support and ST Morpho headers make it easy to expand the functionality of the Nucleo open development platform with a wide choice of specialized expansion boards. The STM32 Nucleo board does not require any separate probe as it integrates the ST-LINK/V2-1 debugger/programmer. The STM32 Nucleo board comes with the STM32 comprehensive software HAL library together with various packaged software examples. The STM32F401RE Nucleo firmware and related documentation is available on www.st.com. Figure 1. STM32-F4 Nucleo board DocID027186 Rev 1 7/17 16

Getting started AN4624 3.1.2 M24SR expansion board The X-NUCLEO-NFC01A1 is a dynamic NFC tag expansion board usable with the STM32 Nucleo system. It is also compatible with Arduino UNO R3 connector layout, and is designed around the STMicroelectronics M24SR dynamic tag. The X-NUCLEO-NFC01A1 interfaces with the STM32 MCU via I 2 C. Figure 2. X-NUCLEO-NFC01A1 M24SR expansion board 8/17 DocID027186 Rev 1

Getting started 3.2 Software description The following software components are needed in order to setup the suitable development environment for creating an application based on the M24SR expansion board: STM32Cube environment and related firmware for STM32Nucleo and M24SR expansion board Development tool-chain and compiler. Several solutions are supported. In this document, the Keil µvision development environment is used. 3.2.1 STM32Cube STMCube TM initiative was originated by STMicroelectronics to ease developers life by reducing development efforts, time and cost. STM32Cube covers STM32 portfolio. STM32Cube version 1.x includes: The STM32CubeMX, a graphical software configuration tool that allows to generate C initialization code using graphical wizards. A comprehensive embedded software platform, delivered per series (such as STM32CubeF4 for STM32F4 series) The STM32Cube HAL, an STM32 abstraction layer embedded software, ensuring maximized portability across STM32 portfolio A consistent set of middleware components such as RTOS, USB, TCP/IP, Graphics All embedded software utilities coming with a full set of examples. The STMCube package is a free solution that can be downloaded from ST website at www.st.com/stm32cube. 3.2.2 Firmware for STM32 Nucleo with X-NUCLEO-NFC01A1 expansion board X-CUBE-NFC1 is a package that contains a firmware with the STM32 Cube framework compatible with the STM32 Nucleo and the X-NUCLEO-NFC01A1 boards. This package contains a sample application that can be used to load data to the M24SR. The same sample application is referenced in further sections of this document. The firmware and related documentation is available on www.st.com. 3.3 Hardware software and system setup This section describes hardware, software and system setup procedure for writing an application based on the M24SR expansion board. 3.3.1 Hardware setup The following hardware is needed to develop a M24SR based application: An STM32 Nucleo development platform (NUCLEO-F401RE used in this document) M24SR expansion board (see Figure 2, order code: X-NUCLEO-NFC01A1) USB type A to Mini-B USB cable to connect the STM32 Nucleo board to the PC DocID027186 Rev 1 9/17 16

Getting started AN4624 3.3.2 Software setup This section lists the minimum requirements in order to: setup the SDK run the sample testing scenario based on the GUI utility customize the application. Development tool-chains and compilers The Keil µvision has been used in this application with the following version: Figure 3. Keil µvision installed version In addition to Keil v5, a specific pack for STM32 microcontrollers must be installed. Here is the list of installed packages for STM32 family: Figure 4. STM32 packages for Keil µvision Note: The package shown above is for Keil μvision environment, packages to support IAR and TrueStudio environment are also available in the X-CUBE-NFC1 delivery. 10/17 DocID027186 Rev 1

Getting started Here are the Keil tool-chain minimum requirements for the PC: Available hard disk space MDK: 1.4GBytes 1GBytes of RAM (2GB recommended) Pentium class PC running one of this OS Windows XP SP3 Windows Vista Windows 7 3.3.3 System setup guide This section describes how to setup different hardware parts before writing and executing an application on the STM32 Nucleo board with the M24SR expansion board. STM32 Nucleo and M24SR expansion boards setup The STM32 Nucleo board integrates the ST-LINK/V2-1 debugger/programmer. The developer can download the relevant version of the ST-LINK/V2-1 USB driver by searching STSW-LINK008 (Windows Vista, Windows 7 or Windows 8) or STSW-LINK009 (Windows XP) on www.st.com. The M24SR expansion board X-NUCLEO-NFC01A1 can be easily connected to the Nucleo motherboard through the Arduino UNO R3 extension connector. The communication between the M24SR expansion board and the STM32 microcontroller on the Nucleo board is using the Inter-Integrated Circuit (I 2 C) transport layer. DocID027186 Rev 1 11/17 16

Software overview AN4624 4 Software overview 4.1 Software architecture This section describes various software layers which are used by the application software to access and use the M24SR expansion board. These layers are: STM32Cube HAL layer Board support package (BSP) layer Figure 5 below outlines the layering of the software architecture that comprises the STM32 Nucleo and the M24SR expansion board: Figure 5. Software architecture 4.2 STM32Cube HAL The STM32Cube HAL is the hardware abstraction layer for the STM32 microcontroller. The STM32Cube HAL ensures maximal portability across STM32 platforms. The HAL driver layer provides a generic multi-instance simple set of APIs (application programming interfaces) to interact with the upper layers (application, libraries and stacks). It is composed of generic and extension APIs. It is directly built around a generic architecture and allows the layers that are built upon, such as the middleware layer, to implement their functionalities without dependencies on the specific hardware configuration for a given microcontroller unit (MCU). This structure improves the library code re-usability and guarantees an easy portability on other devices. For an in-depth understanding of the STM32Cube HAL drivers API, please refer to the document Description of STM32F4xx HAL drivers, User manual UM1749, available from www.st.com. 12/17 DocID027186 Rev 1

Software overview 4.3 Board support package (BSP) The board support package is a software component that allows to control the external peripherals present on the STM32 Nucleo board (but not integrated into the MCU). This is a limited set of APIs which provides a programming interface for certain board specific peripherals, e.g. the LED, the user button etc. This interface also helps in identifying the specific board version. In case of M24SR expansion board, it provides the driver interface for M24SR dynamic tag. It provides support for initializing and obtaining M24SR data. 4.4 Middleware In case of M24SR expansion board, the middleware provides the NDEF interface for M24SR dynamic tag. It provides support to retrieve a NDEF message without need for the user to know how to build a NDEF message and how to store it in a type 4 tag memory like M24SR. DocID027186 Rev 1 13/17 16

Guide for writing application AN4624 5 Guide for writing application This section describes how to write an application using M24SR dynamic tag on STM32 Nucleo board equipped with M24SR expansion board. 5.1 Relevant APIs for M24SR application This section describes the APIs available for initializing and communicating with the M24SR expansion board. 5.1.1 Initialization For correct operation, the application needs to perform the basic initialization steps in order to configure and setup the STM32 Nucleo with M24SR expansion board hardware and software stack. This section describes the required initialization steps. Initializing STM32Cube HAL The STM32Cube HAL library needs to be initialized so that the necessary hardware components are correctly configured. HAL_Init(); This API initializes the HAL library. It configures Flash memory prefetch, Flash memory preread and buffer cache. It also configures the time base source, vectored interrupt controller and low-level hardware. Initializing Nucleo board peripherals and M24SR expansion board Some of the Nucleo on-board peripherals, and the M24SR expansion board need to be configured before use. The initialization functions are: BSP_LED_Init(Led_TypeDef Led); This API configures the LED on the Nucleo board. BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Button_Mode); This API configures the user button mode. One of two modes can be selected: the GPIO mode or the external interrupt (EXTI) mode. TT4_Init() This API configures the M24SR device on M24SR expansion board. 14/17 DocID027186 Rev 1

Guide for writing application 5.1.2 Writing data to M24SR expansion board The M24SR middleware library provides the API and the functionality for programming NDEF messages to M24SR. Once the M24SR is initialized, these functions can be used to write data: TT4_WriteURI(sURI_Info *puri) This API allow to store an URI message in the M24SR (previous content is deleted) TT4_WriteSMS(sSMSInfo *psms) This API allow to store a SMS message in the M24SR (previous content is deleted) TT4_WriteEmail(sEmailInfo *pemailstruct) This API allow to store an email message in the M24SR (previous content is deleted) TT4_WriteVcard(sVcardInfo *pvcard) This API allow to store a vcard message in the M24SR (previous content is deleted) TT4_WriteGeo(sGeoInfo *pgeo) This API allow to store a geolocation message in the M24SR (previous content is deleted) 5.2 Application description An application example using M24SR expansion board and a Nucleo board can be downloaded from www.st.com. The following Nucleo boards are supported: L0, L1, F0, F3, F4. This application allows to: 1. Store a URI NDEF message ( www.st.com ) in the M24SR, using the API call TT4_WriteURI() 2. Bring a NFC capable smartphone near the M24SR expansion board antenna and automatically launch the smartphone browser on the www.st.com URL. DocID027186 Rev 1 15/17 16

Revision history AN4624 6 Revision history Table 3. Document revision history Date Revision Changes 18-Dec-2014 1 Initial release. 16/17 DocID027186 Rev 1

IMPORTANT NOTICE PLEASE READ CAREFULLY STMicroelectronics NV and its subsidiaries ( ST ) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST s terms and conditions of sale in place at the time of order acknowledgement. Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of Purchasers products. No license, express or implied, to any intellectual property right is granted by ST herein. Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product. ST and the ST logo are trademarks of ST. All other product or service names are the property of their respective owners. Information in this document supersedes and replaces information previously supplied in any prior versions of this document. 2014 STMicroelectronics All rights reserved DocID027186 Rev 1 17/17 17