UM1818 User manual Street lighting power line modem evaluation board based on ST7580 PLM and STM32 microcontroller Introduction This document explains how to use and set up the firmware and the software designed for the STEVAL-IHP007V1 board and all the necessary setup for using the hardware. The system is based to the ST7580 data link protocol firmware, data link protocol described in the application note AN4018. ST7580 data link protocol firmware is organized in a layer structure. A dedicated layer allows the user to design its own application interfacing to the evaluation board features with very simple and easy to use APIs. Dedicated software graphic user interface (GUI) allows the user to use all the embedded features interfacing the PLM evaluation board with the PC via an RS232 communication port. This firmware is developed using STM32F10x standard peripherals library Rel.3.5.0 and IAR Embedded Workbench® IDE for STM32 microcontrollers Rel. 6.50x The STEVAL-IHP007V1 hardware evaluation board embeds an ARM 32-bit Cortex™-M3 core-based STM32F103xB and an ST7580 PSK multi mode power line networking systemon-chip. Figure 1. STEVAL-IHP007V1 evaluation board May 2015 DocID026935 Rev 1 1/47 www.st.com 47 Contents UM1818 Contents 1 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Hardware installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4 Firmware description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.2 Remote firmware update (RFU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.3 Firmware download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.4 Firmware architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 4.5 Firmware data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.6 Firmware frame types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.6.1 Communication frames types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.6.2 Ping frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.6.3 Error frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.6.4 Service frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Appendix A HID commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Appendix B Schematic diagrams and bill of material . . . . . . . . . . . . . . . . . . . . . 35 B.1 Schematic diagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 B.2 Bill of material (BOM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Appendix C CRC 16 calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5 Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6 Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2/47 DocID026935 Rev 1 UM1818 1 Features Features • Configurable PSK power line modem interface with an embedded firmware stack for a complete power line communication management • 8 user configurable general purpose input/output pins • USART communication channel for evaluation board interfacing • Internal configurable RTC evaluation board with lithium backup battery • Programmable user data and PLM parameters Flash memory area • Remote firmware update • Embedded AES 128 encryption evaluation board with programmable AES Key DocID026935 Rev 1 3/47 47 Description 2 UM1818 Description The STEVAL-IHP007V1 block diagram is shown in Figure 2. The general purpose power line modem evaluation board is based on an ST7580 x-PSK power line modem device and an ARM 32-bit Cortex™-M3 core based STM32F103xB microcontroller. The PLM evaluation board is a fully functional communication evaluation board, with 8 programmable I/Os, a real time clock and a Flash memory area for modem parameters and user data storage. The firmware structure is made up of several layers, each dealing with a different feature. The application layer engine is the general interface between the user program and all the parts of the evaluation board. It manages the communication ports, the evaluation board peripherals such as SCI, RTC, I/Os, LEDs and timing management. It is also the interface between the PLM communication protocol and the user application layer. The PLM communication protocol, itself made up of several layers, implements and manages the power line communication, manages the conflicts, timing and repetitions, the addressing, and so on. Please refer to AN4018 for details on the ST7580 communication protocol features and application services provided. Some features are managed directly by the application engine, and are transparent to the user, such as the RTC management or the board parameter update, as well as the board programming and configuration, which is done by particular programming or service commands managed and acknowledged directly by the application engine. Even the remote firmware update is managed by the application engine and allows the firmware being update remotely by power line modem. The STEVAL-IHP007V1 is powered by a dual regulated DC power source, +12VDC (pin 1) and +3.3 VDC (pin 2) from the power supply connector (J2). The pin 3 is the ground. The communication is done via power line, which is applied to the board using the J1 connector, where the pin 1 must be connected to the neutral wire while the pin 3 to the phase wires (refer to the Appendix A). Figure 2. STEVAL-IHP007V1 block diagram It is possible to connect the evaluation board in a three phase line (in case of communication modules are connected in all three phases), in this case an external capacitor of 220 nF X1 must be connected to any additional phase, and then the other side of capacitors together with the common pin 5 of the J2 connector, following the schematic shown in the Figure 3, and the 0 Ω resistor R1 must be mounted. 4/47 DocID026935 Rev 1 UM1818 Description Figure 3. Three phase connection The GP PLM module is provided of a user interface (J3) shown in Figure 4 where there are connected the SPI interface pins (MOSI, MISO, SCK and NSS), the RS232 interface pins (Tx and Rx), the USB interface pins (D+ and D-) and the user programmable general purpose I/O pins. Remark that those pins are directly connected to the microcontroller, so be careful to provide the correct insulation and protection depending on the use those pins are addressed. It is possible to power the PLM using the +3.3VDC (pin 19), +12VDC (pin 20 or 22) and GND (pins 17, 23, 20 and 24) of this connector instead of the connector J2, using only a single connector for power supply and control signals. A lithium backup battery mounted on the board and 32 KHz quartz allows the use of the full functionality of the internal RTC of the microcontroller, allowing precise time-based operations. Figure 4. User interface connector A two color LED allows the signaling the board operations, data transmission and reception. Finally, a programming connector allows the firmware download and debug, even if it is possible to use the remote firmware update feature to remotely update the firmware using the PLM, as described further in this user manual. If the IAR - JLINK/JTRACE is used for the firmware downloading, a simple JTAG adapter is necessary. The Figure 5 shows the adapter schematics. DocID026935 Rev 1 5/47 47 Description UM1818 Figure 5. Programming connector JTAG adapter 6/47 DocID026935 Rev 1 UM1818 3 Hardware installation Hardware installation Connect a regulated dual DC power supply to the power source pins of the connector J3 as described previously and power the board. In order to download the firmware, plug the programmer adapter (Figure 5) in the programming connector J1 and the IAR J-Link programmer in the JTAG connector of the adapter. Refer to the chapter firmware description (paragraph 6.3 for the firmware download procedure). As soon as the application is launched, the LEDs should quickly switch on indicating that the board has to be configured. DocID026935 Rev 1 7/47 47 Firmware description UM1818 4 Firmware description 4.1 Introduction The firmware structure is constituted of several layers each of it taking care of a different feature. The application layer engine is the general interface between the user program and all the parts of the module. It takes care of the communication ports, the board peripherals as RTC and I/Os, and timing management. It is also the interface between the PLM communication protocol and the user program. The PLM communication protocol, itself constituted by several layers, implements and manages the power line communication, manages the conflicts, timing and repetitions, the addressing and so on. Some features are managed directly by the application engine, and are transparent to the user, as well as the board programming and configuration, which is done by particular programming or service commands managed and acknowledged directly by the application engine, the RTC management, the board parameter or the firmware update. The user application can be interfaced to the application engine by simples APIs used for the data transfer and the evaluation board interface. The Figure 6 shows the firmware structure. Figure 6. Firmware structure The file user.c/h and application.c/h are the owner of application management, this manage the data flow from/to the PLM physical and from/to the UART side. 4.2 Remote firmware update (RFU) The remote firmware update (RFU) uses the power line modem as external communication channel for receiving a new firmware dump. The firmware dump is placed in the internal Flash memory of the microcontroller. Hence, the total memory size of the microcontroller must be at least the double of the estimated maximum size of the firmware application (in this application is set to 60 Kbytes), plus 4 Kb of additional memory for a bootloader. The Figure 7 shows the microcontroller memory organization. The bootloader is loaded at the startup and checks the active segment containing the actual firmware. The implemented mechanism uses three partitions of the microcontroller’s Flash 8/47 DocID026935 Rev 1 UM1818 Firmware description memory, one containing the bootloader and two containing the actual running firmware (active image) and the new firmware as soon as a RFU is needed. As soon as the firmware transfer is completed, a “swap” command sent from the remote PLM causes the target PLM to check first the integrity of the firmware dump (actually a checksum is calculated and compared with the one sent by the remote PLM), and after the reset vector address of the new firmware is written in a dedicated Flash segment of the bootloader. Last the microcontroller is self reset, and the new firmware executed. Figure 7. Memory organization The RFU protocol manages the RFU “start”, “get new firmware segment” (with the segment address) and “swap” commands. The protocol is not embedded in the bootloader, hence it can be updated with the new firmware, bust the user must be careful in the modifications as any bugs can compromise the RFU mechanism. As soon as a new firmware segment is received, the RFU manager checks if the address is within the firmware interrupt vector table. If it is the case, an offset depending on the free firmware image (1 or 2) allocation is added to each interrupt vector before being written in the free image Flash area. In the Figure 8 is shown the RFU flowchart. DocID026935 Rev 1 9/47 47 Firmware description UM1818 Figure 8. RFU flowchart (1of 2) Figure 9. RFU flowchart (2 of 2) 4.3 Firmware download In the setup directory there are different workspaces stored in different directories. In order to implement the remote firmware update feature it is necessary to download the project located in the workspace “Firmware - Application and Bootloader”. This workspace contains two different projects, one is the bootloader and the other one is the application itself. If the board has never been programmed, this workspace must be downloaded before. Open the IAR Embedded Workbench® IDE for STM32 microcontrollers Rel. 6.50 (or a more recent release). Click File\Open\Workspace and load the following workspace placed in the directory selected during the setup file installation: “Firmware - Application and Bootloader\EWARM\Project.eww”. Verify that the application project is the active project (the project name must be in bold), otherwise select the active project in the list below the workspace (Figure 10). 10/47 DocID026935 Rev 1 UM1818 Firmware description Figure 10. Active project selection Click "Project - Batch Build" or press the key F8 in order to compile at the mean time the bootloader and the application. After the compiling is completed, press "Project - Download and Debug" or press the keys CTRL+D. The both firmware download starts. As soon as the download is completed, press F5 in order to run the application (or exit from the debug mode pressing the keys CTRL+SHIFT+D and unplug the programmer). If the procedure is done correctly, the orange LED should be on, indicating the board has never been set up before. If it is not the case, try first to erase the memory by clicking Project\Download\Erase Memory and download again the firmware as described before. Use the GUI interface in order to setup the board and connect it to the power line as described in the dedicated paragraph. As soon as bootloader has been installed in the evaluation board is possible to remotely (via power line) update the firmware using the RFU feature. Each new firmware version has to be programmed using the workspace “Firmware - Application standalone\EWARM\Project.eww”. The bin file produced by this workspace that is located in the folder “Firmware - Application standalone\ EWARM\PLM_HID_STANDALONE.bin” can be directly loaded using the GUI interface. The difference of this application with the one contained in the workspace with the bootloader is mainly in the stm32f10x_flash.icf linker file and some workspace parameters that are not used in the application without the bootloader (as multiple build, simultaneous debug mode, etc.). The setup folder contains also the Firmware - Bootloader folder, where inside there is the bootloader firmware; and the folder Firmware - Sniffer which contains the sniffer workspace to download in a PLM module useful if the data sniffing feature of the interface is used. In this case the PLM module will work only as a sniffer. 4.4 Firmware architecture The structure of the workspace is divided in different sections as shown in the Figure 11. DocID026935 Rev 1 11/47 47 Firmware description UM1818 Figure 11. Workspace structure At this level, all the communication APIs and all the APIs for the application engine interface are available. In the main file, the following code is implemented for running the state machine engines: while(1){ DL_FSM();//PLM Main Loop APP_StackUpdate();// USART State machine USER_Program();// PLM State machine #ifdef USE_WDG //STM32 Window Watchdog IWDG_ReloadCounter(); #endif #ifdef KEEP_ALIVE //PLM Keep Alive systems Check_KA_Timeout(); #endif } After the initialization the infinite loop calls three main functions: the DL_FSM(), USER_Program() and the APP_StackUpdate() routine. 12/47 DocID026935 Rev 1 UM1818 Firmware description The DL_FSM() is the PLM stack main loop, this manage the PLM low level communication. The application engine “APP_StackUpdate()” is the state machine which runs inside the PLM application state machine; this uses the data link service provided from DL_Service layer. The user program implemented in this user manual realizes a bridge between the power line communication and the COM port: all data arriving from the COM port addressed to another PLM module is sent via PLM, and in turn all data received from PLM is sent back to the COM port. It is necessary that the user program does not stop the core operations (looping instructions) without calling the application engine. All the hardware configurations are contained in the board support package file, and the file DL_SimpleNodeConf contains the data link configuration parameters and the PLM modem configuration value (frequency, modulation zero crossing delay, etc.). The next paragraph lists all the data types and the APIs used in the application engine that can be modified by the user if different needs arise. 4.5 Firmware data types The data type found in the wrapper.h module, are listed hereafter: /* USER FRAME STRUCTURE */ typedef struct { APP_ftype_t type; bool broadcast; u8 address[6]; u8 len; u8 data[USER_PAYLOAD_SIZE]; /* MAX PAYLOAD SIZE: 100 bytes */ bool EnableTX }APP_frame_t; /* APPLICATION FRAME TYPE */ typedef enum { APP_DATA_FRAME = 0x00, APP_SERVICE_FRAME = 0x01, APP_PING_FRAME = 0x02, APP_ERROR_FRAME = 0x03, APP_PROGRAMMING_FRAME = 0x04, APP_ACK_FRAME = 0x05, APP_MIB_FRAME = 0x06 }APP_ftype_t; DocID026935 Rev 1 13/47 47 Firmware description UM1818 /* APPLICATION ERRORS */ typedef enum { APP_ERROR_NONE = 0x00, // No error APP_ERROR_GENERIC = 0x01, // Generic communication error APP_ERROR_COMM_TIMEOUT = 0x02, // Communication timeout error APP_ERROR_SERVICE_GRP_UNKNOWN = 0x03, // Service group unknown error APP_ERROR_SERVICE_CMD_ERROR = 0x04, // Service command error APP_ERROR_COMMUNICATION = 0x05, // Communication error APP_ERROR_ISOLATED_NODE = 0x06, // Node unreachable error APP_ERROR_HARDWARE = 0x07, // Hardware error APP_ERROR_WRONG_PROG_COMMAND error = 0x08, // Wrong programming command APP_ERROR_WRONG_PROG_GROUP = 0x09, // Wrong programming group error APP_ERROR_DEVICE_BLANK = 0x0a, // Device blank APP_ERROR_RTC_ERROR = 0x0b, // Error setting the system time APP_ERROR_WATCHDOG_DISABLED = 0x0c, // Hardware reset impossible APP_ERROR_NODE_INIT_FAILED = 0x0d, // Node initialization failure APP_ERROR_RTC_DISABLED = 0x0e // Internal RTC disabled }APP_ERROR_t; /* PROGRAMMING GROUPS */ typedef enum { PROG_GRP_DEVICE_DATA = 0x00, // Device Data PROG_GRP_LL_STACK_PARAM = 0x01, // Link layer stack parameters PROG_GRP_USER_DATA = 0x02 // User program }APP_PROG_GROUP_t; /* SERVICE COMMANDS */ typedef enum { /* NATIVE SERVICE COMMANDS */ SERVICE_SOFTWARE_RESET = 0x00,// Reset internal state machines SERVICE_HARDWARE_RESET = 0x01,// Module hardware reset SERVICE_PARAM_SET = 0x02,// Set service parameters SERVICE_PARAM_GET = 0x03,// Get service parameters SERVICE_INPUTS_GET = 0x04,// Get general purpose inputs pin status SERVICE_OUTPUTS_SET value = 0x05,// Set general purpose outputs pins SERVICE_FW_REL_GET release = 0x06,// Get the stack and the module firmware SERVICE_PLM_CLOCK_SET 14/47 = 0x07,// Set the internal time clock value DocID026935 Rev 1 UM1818 Firmware description SERVICE_PLM_CLOCK_GET = 0x08,// Get the internal time clock value SERVICE_IO_CONFIG_SET output pins = 0x09,// Set the general purpose input and SERVICE_IO_CONFIG_GET output pins = 0x0a,// Get the general purpose input and SERVICE_NET_DISCOVER_REQ = 0x0b, SERVICE_RFU_SET_IMG_HEADER = 0x0c, SERVICE_RFU_SET_IMG_DATA = 0x0d, SERVICE_RFU_SWAP_IMG = 0x0e, SERVICE_SN_SET = 0x0f, SERVICE_SN_GET = 0x10 /* USER DEFINED SERVICE COMANDS */ // SERVICE_USER_CMD_xx (0x0b to 0x7f) = 0x.., // User defined service commands }APP_SER_CMD_t; 4.6 Firmware frame types This paragraph describes all the frame types that are implemented in this firmware. In each field there is also the description. 4.6.1 Communication frames types Frames exchanged between two PLM modules or between a PLM module and an external device connected to the COMM interface. From the COMM interface module (USART) buffer[0] = n + 10; // Data frame payload length (n + 10) buffer[1] = DATA_FRAME_TYPE | BROADCAST_FLAG; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8,..8+n-1] = user_data[n]; // User data (n bytes, at least 1) buffer[8+n,8+n+1] = CRC16; // CRC-16 /* BROADCAST_FLAG = 0x80 -> data sent in broadcast - BROADCAST_FLAG = 0x00 -> data sent in unicast */ From / to communication interface (PLM, USART) frame.type = DATA_FRAME_TYPE; // Data frame type frame.len = n; // Data frame payload length frame.broadcast = TRUE / FALSE; // TRUE = broadcast, FALSE = unicast frame.address = target_module.address; // Target device address (6 bytes) frame.data[n] = service_data[n]; // User data (n bytes) DocID026935 Rev 1 15/47 47 Firmware description 4.6.2 UM1818 Ping frames This particular frame is used to ping a remote (via PLM interface) or a local (via COMM interface) module. When the ping frame is received, this is managed directly at the data link layer and is not notified at the application and consequently the user levels. From the COMM interface module (USART). buffer[0] = 10; // Ping frame payload length buffer[1] = APP_PING_FRAME; // Ping frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8,9] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_PING_FRAME; // Ping frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 4.6.3 Error frames Can be considered as data frames; they are user error frames from user application level addressed to a target PLM module. From / to communication interface (PLM, USART) buffer[0] = 12; // Error frame payload length buffer[1] APP_ERROR_FRAME; // Target device address (6 bytes) buffer[2,..7] = target_module.address; // Ping frame type buffer[8,9]= user_error_code; // Echo buffer[10,11] = CRC16; // CRC-16 Error code list 0x0000 = APP_ERROR_NONE 0x0001 = APP_ERROR_GENERIC 0x0002 = APP_ERROR_COMM_TIMEOUT 0x0003 = APP_ERROR_SERVICE_GRP_UNKNOWN 0x0004 = APP_ERROR_SERVICE_CMD_ERROR 0x0005 = APP_ERROR_COMMUNICATION 0x0006 = APP_ERROR_ISOLATED_NODE 0x0007 = APP_ERROR_HARDWARE 0x0008 = APP_ERROR_WRONG_PROG_COMMAND 0x0009 = APP_ERROR_WRONG_PROG_GROUP 0x000a = APP_ERROR_DEVICE_BLANK 0x000b = APP_ERROR_RTC_ERROR 0x000c = APP_ERROR_WATCHDOG_DISABLED 0x000d = APP_ERROR_NODE_INIT_FAILED 0x000e = APP_ERROR_RTC_DISABLED 16/47 DocID026935 Rev 1 UM1818 Firmware description user_error_code = (APP_ERROR_t)(buffer[8]<<8)| buffer[9]); 4.6.4 Service frames Frames containing service commands concerning both some native module features (internal clock, general purpose inputs and outputs, etc.) and user defined service frames. Native frames are managed directly by the application engine. From the COMM interface module (USART) buffer[0] = n + 11; // Service frame payload length (n + 11) buffer[1] = APP_SERVICE_FRAME | BROADCAST_FLAG;// Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = (APP_SER_CMD_t)command; // Service command buffer[9,..9+n-1] = service_data[n]; // Service data buffer[9+n, 9+n+1] = CRC16; // CRC-16 /* BROADCAST_FLAG = 0x80 -> data sent in broadcast - BROADCAST_FLAG = 0x00 -> data sent in unicast */ From / to communication interface (PLM, USART) buffer[0] = n + 11; // length buffer[1] = DATA_FRAME_TYPE; // Service or ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = (APP_SER_CMD_t)command/APP_ACK_FRAME;// Service command/ACK buffer[9,..n] = service_data[n]/Command_Echo; // Service data or Command echo(n=1) buffer[n+1,n+2] = CRC16; DocID026935 Rev 1 17/47 47 Firmware description UM1818 Service command list /* NATIVE SERVICE COMMANDS */ SERVICE_SOFTWARE_RESET = 0x00, // Reset internal state machines SERVICE_HARDWARE_RESET = 0x01, // Module hardware reset SERVICE_PARAM_SET = 0x02, // Set service parameters SERVICE_PARAM_GET = 0x03, // Get service parameters SERVICE_INPUTS_GET = 0x04, // Get general purpose inputs pin status SERVICE_OUTPUTS_SET = 0x05, // Set general purpose outputs pins value SERVICE_FW_REL_GET = 0x06, // Get the stack and the module firmware release SERVICE_PLM_CLOCK_SET = 0x07, // Set the internal time clock value SERVICE_PLM_CLOCK_GET = 0x08, // Get the internal time clock value SERVICE_IO_CONFIG_SET = 0x09, // Set the general purpose input and output pins SERVICE_IO_CONFIG_GET = 0x0a, // Get the general purpose input and output pins SERVICE_NET_DISCOVER_REQ = 0x0b, SERVICE_RFU_SET_IMG_HEADER = 0x0c, SERVICE_RFU_SET_IMG_DATA = 0x0d, SERVICE_RFU_SWAP_IMG = 0x0e, SERVICE_SN_SET = 0x0f, SERVICE_SN_GET = 0x10 /* USER DEFINED SERVICE COMANDS */ 0x.. = SERVICE_USER_CMD_xx PLM reset: software, hardware From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) /* FOR SOFTWARE RESET */ buffer[8] = SERVICE_SOFTWARE_RESET; /* FOR HARDWARE RESET */ buffer[8] = SERVICE_HARDWARE_RESET; buffer[9,10] = CRC16; Note: 18/47 // CRC-16 Any response from PLM module DocID026935 Rev 1 UM1818 Firmware description Set module parameters: programming user parameters From the COMM interface (USART) buffer[0] = 44 // Service frame payload length buffer[1] = APP_SERVICE_FRAME | BROADCAST_FLAG;// Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PARAM_SET; // Service command buffer[9] = PROG_GRP_USER_DATA; // Type command buffer[10 -> 41] = *user_data_buffer; // Program data buffer[42,43] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_SERVICE_FRAME; // Service frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 Get module parameters: programming user parameters From the COMM interface (USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PARAM_GET; // Service command buffer[9] = PROG_GRP_USER_DATA; // Type command buffer[10,11] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 44; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PARAM_GET; // Service command buffer[9] = PROG_GRP_USER_DATA; // Type command buffer[10 -> 41] = *user_data_buffer; // Program Data buffer[42,43] = CRC16; // CRC-16 DocID026935 Rev 1 19/47 47 Firmware description UM1818 Get module general purpose inputs/outputs configuration From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_IO_CONFIG_GET; // Service Command buffer[9,10] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] =SERVICE_IO_CONFIG_GET; // Service command buffer[9] = *sender.configuration_value; // input/output configuration buffer[10,11] = CRC16; // CRC-16 Set module general purpose inputs/outputs configuration From the COMM interface (USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_IO_CONFIG_SET; // Service command buffer[9] = target.configuration_value; // bit x = 1 -> IOx = output, bit x = 0 -> IOx = input buffer[10,11] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address // Target device address (6 bytes) buffer[8]= APP_SERVICE_FRAME; // Service frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 Get module general purpose inputs value From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_INPUTS_GET; // Service command buffer[9,10] = CRC16; // CRC-16 20/47 DocID026935 Rev 1 UM1818 Firmware description From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] =SERVICE_INPUTS_GET; // Service command buffer[9] = *sender.inputs_value; // Read GPIO Input value buffer[10,11] = CRC16; // CRC-16 Set module general purpose outputs value From the COMM interface (USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_OUTPUTS_SET; // Service command buffer[9] = target.outputs_value; // Set GPIO output value buffer[10,11] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_SERVICE_FRAME; // Service frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 Get module firmware release From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_FW_REL_GET; // Service command buffer[9,10] = CRC16; // CRC-16 DocID026935 Rev 1 21/47 47 Firmware description UM1818 From / to communication interface (PLM, USART) buffer[0] = 15; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_FW_REL_GET; // Service command buffer[9,10] = target_module.firmware_release; // Module firmware release (x.y) buffer[11,12] = target_module.stack_release; // Stack firmware release (x.y) buffer[13,14] = CRC16; // CRC-16 Get module time clock value From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PLM_CLOCK_GET; // Service command buffer[9,10] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 14; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PLM_CLOCK_GET; // Service command buffer[9] = target_module.hours; // Hours buffer[10] = target_module.minutes; // Minutes buffer[11] = target_module.seconds; // Seconds buffer[12,13] = CRC16; // CRC-16 Set module time clock value From the COMM interface (USART) buffer[0] = 14; // Service frame payload length buffer[1] = APP_SERVICE_FRAME | BROADCAST_FLAG;// Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_PLM_CLOCK_SET; // Service command buffer[9] = target_module.new_hours; // Hours buffer[10] = target_module.new_minutes; // Minutes buffer[11] = target_module.new_seconds; // Seconds buffer[12,13] = CRC16; // CRC-16 22/47 DocID026935 Rev 1 UM1818 Firmware description From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_ACK_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_SERVICE_FRAME; // Service frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 GET PLM Module SNR ratio From the COMM interface (USART) buffer[0] = 11; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_SN_GET; // Service command buffer[9,10] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_SN_GET; // Service command buffer[9] = *sender.sn_value; // SNR Ratio from 0 to 31 buffer[10,11] = CRC16; // CRC-16 Set PLM Module SNR ratio From the COMM interface (USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_SERVICE_FRAME; // Service frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = SERVICE_SN_SET; // Service command buffer[9] = target.sn_value; // SNR Ratio from 0 to 31 buffer[10,11] = CRC16; // CRC-16 From / to communication interface (PLM, USART) buffer[0] = 12; // Service frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address // Target device address (6 bytes) buffer[8]= APP_SERVICE_FRAME; // Service frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 DocID026935 Rev 1 23/47 47 HID commands Appendix A UM1818 HID commands HID frames are data frames where the payload is customized for the HID ballast application. From the COMM interface (USART) buffer[0] = n + 10; // Data frame payload length (n + 10) buffer[1] = APP_DATA_FRAME | BROADCAST_FLAG; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8,..8+n-1] = user_data[n]; // User data (n bytes, at least 1) buffer[8+n,8+n+1] = CRC16; // CRC-16 /* BROADCAST_FLAG = 0x80 -> data sent in broadcast - BROADCAST_FLAG = 0x00 -> data sent in unicast */ From / to communication interface (PLM, USART) buffer[0] = n + 10; // Data frame payload length (n + 10) buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8,..n] = HID_DATA; // HID data buffer[n+1,n+2] = CRC16; // CRC-16 HID board reset From the COMM interface (USART) buffer[0] = 13; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = 0x73; // command set char 's' buffer[9] = 0x00; // HID board command identify "reset" buffer[10] = reset_type; // Software reset = 0xaa, Hardware reset = 0x0c buffer[11,12] = CRC16; // CRC-16 From / to communication interface (PLM, USART) Case hardware reset, the PLM set the reset GPIO pin to reset the HID ballast (GPIO Port A Pin 6) buffer[0] = 12; // Data frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_DATA_FRAME; // Data frame type buffer[9]= command_echo; // Echo buffer[10,11] = CRC16; // CRC-16 24/47 DocID026935 Rev 1 UM1818 HID commands Case Software reset buffer[0] = 12; // Data frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_DATA_FRAME; // Data frame type buffer[9]= 0x73; // Command char 's' buffer[10,11] = CRC16; // CRC-16 Lamp dimming From the COMM interface (USART- Source “Concentrator”) and To the COMM interface (USART- Destination “HID ballast”) buffer[0] = 13; // Data frame payload length buffer[1] = APP_DATA_FRAME | BROADCAST_FLAG; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = 0x73; // command set char 's' buffer[9] = 0x01; // HID board command identify "Dimming" buffer[10] = dimming_value; // Dimming value 0 - 100 (0% - 100%) buffer[11,12] = CRC16; // CRC-16 From the COMM interface (USART- Destination “HID ballast”) buffer[0] = 2; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2] = 0x73; // Char 's' To the COMM interface (USART- Source “Concentrator”) buffer[0] = 12; // Data frame payload length buffer[1] = APP_ACK_FRAME; // ACK frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8]= APP_DATA_FRAME; // Data frame type buffer[9]= 0x73; // Command char 's' buffer[10,11] = CRC16; // CRC-16 DocID026935 Rev 1 25/47 47 HID commands UM1818 Get HID parameter From the COMM interface (USART- Source “Concentrator”) and To the COMM interface (USART- Destination “HID ballast”) buffer[0] = 12; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = target_module.address; // Target device address (6 bytes) buffer[8] = 0x67; // command set char 'g' buffer[9] = param_to_get; // HID Param Value buffer[10,11] = CRC16; // CRC-16 /* param_to_get value */ 0x00 = HARDWARE VERSION 0x01 = BUS VOLTAGE 0x02 = LAMP VOLTAGE 0x03 = HARDWARE STATUS 0x04 = LAMP POWER 0x05 = LAST FAILURE 0x06 = POWER SUPPLY VOLTAGE 0x07 = BOARD TEMPERATURE (°C) 0x08 = N° OF POWER ON 0x09 = LAMP LIFETIME (Hours) 0x0a = GET ALL PARAMETERS From the COMM interface (USART- Destination “HID Ballast”) /* GET HARDWARE VERSION */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x00; // HARDWARE VERSION buffer[3] = hardware_release_xx; // Hardware release xx.yy (xx, yy = bcd format) buffer[4] = hardware_release_yy; // Hardware release xx.yy (xx, yy = bcd format) 26/47 DocID026935 Rev 1 UM1818 HID commands /* GET BUS VOLTAGE */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x01; // BUS VOLTAGE buffer[3] = bus_voltage_h; // High byte of bus voltage buffer[4] = bus_voltage_l; // Low byte of bus voltage /* GET LAMP VOLTAGE */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x02; // LAMP VOLTAGE buffer[3] = lamp_voltage_h; // High byte of lamp voltage buffer[4] = lamp_voltage_l; // Low byte of lamp voltage /* GET HARDWARE STATUS */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x03; // HARDWARE STATUS buffer[3] = hardware_status_h; // High byte of hardware status buffer[4] = hardware_status_l; // Low byte of hardware status /* hardware_status value */ 0x00 = IDLE 0x01,0x02,0x03 = STARTUP 0x04,0x05 = WARMUP 0x06 = RUN 0x07 = WAIT 0x08 = FAILURE DocID026935 Rev 1 27/47 47 HID commands UM1818 /* GET LAMP POWER */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x04; // LAMP POWER buffer[3] = lamp_power_h; // High byte of lamp power buffer[4] = lamp_power_l; // Low byte of lamp power /* GET LAST FAILURE */ buffer[0] = 9; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x05; // LAST FAILURE buffer[3] = hardware_status_h; // High byte of hardware status before the failure buffer[4] = hardware_status_l; // Low byte of hardware status before the failure buffer[5] = bus_voltage_h; // High byte of bus voltage before the failure buffer[6] = bus_voltage_l; // Low byte of bus voltage before the failure buffer[7] = lamp_voltage_h; // High byte of lamp voltage before the failure buffer[8] = lamp_voltage_l; // Low byte of lamp voltage before the failure /* GET POWER SUPPLY VOLTAGE */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x07; // BOARD TEMPERATURE buffer[3] = board_temperature_h; // High byte of board temperature (°C) buffer[4] = board_temperature_l; // Low byte of board temperature (°C) /* GET BOARD TEMPERATURE (°C) */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x07; // BOARD TEMPERATURE buffer[3] = board_temperature_h; // High byte of board temperature (°C) buffer[4] = board_temperature_l; // Low byte of board temperature (°C) 28/47 DocID026935 Rev 1 UM1818 HID commands /* GET N° OF POWER ON */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x08; // N. OF POWER ON buffer[3] = power_on_n_h; // High byte of number of lamp power on buffer[4] = power_on_n_l; // Low byte of number of lamp power on /* GET LAMP LIFETIME (Hours) */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x09; // LAMP LIFETIME (hours) buffer[3] = lamp_lifetime_h; // High byte of lamp lifetime (hours) buffer[4] = lamp_lifetime_l; // Low byte of lamp lifetime (hours) /* GET ALL PARAMETERS */ buffer[0] = 5; // Data frame payload length buffer[1] = 0x67; // Get command 'g' ascii value buffer[2] = 0x0a; // GET ALL PARAMETERS buffer[3] = hardware_release_xx; // Hardware release xx.yy (xx, yy = bcd format) buffer[4] = hardware_release_yy; // Hardware release xx.yy (xx, yy = bcd format) buffer[5] = bus_voltage_h; // High byte of bus voltage before the failure buffer[6] = bus_voltage_l; // Low byte of bus voltage before the failure buffer[7] = lamp_voltage_h; // High byte of lamp voltage before the failure buffer[8] = lamp_voltage_l; // Low byte of lamp voltage before the failure buffer[9] = hardware_status_h; // High byte of hardware status before the failure buffer[10] = hardware_status_l; // Low byte of hardware status before the failure buffer[11] = lamp_power_h; // High byte of lamp power buffer[12] = lamp_power_l; // Low byte of lamp power buffer[13] = last_hardware_status_h;// High byte of hardware status before the failure buffer[14] = last_hardware_status_l;// Low byte of hardware status before the failure buffer[15] = last_bus_voltage_h; // High byte of bus voltage before the failure buffer[15] = last_bus_voltage_l; // Low byte of bus voltage before the failure buffer[17] = last_lamp_voltage_h; // High byte of lamp voltage before the failure buffer[18] = last_lamp_voltage_l; // Low byte of lamp voltage before the failure buffer[19] = input_voltage_h; // High byte of power supply voltage buffer[20] = input_voltage_l; // Low byte of power supply voltage DocID026935 Rev 1 29/47 47 HID commands UM1818 buffer[21] = board_temperature_h; // High byte of board temperature (°C) buffer[22] = board_temperature_l; // Low byte of board temperature (°C) buffer[23] = power_on_n_h; // High byte of number of lamp power on buffer[24] = power_on_n_l; // Low byte of number of lamp power on buffer[25] = lamp_lifetime_h; // High byte of lamp lifetime (hours) buffer[26] = lamp_lifetime_l; // Low byte of lamp lifetime (hours) To the COMM interface (USART- source “concentrator”) /* GET HARDWARE VERSION */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x00; // Response to g0 command buffer[10] = hardware_release_xx; // Hardware release xx.yy (xx, yy = bcd format) buffer[11] = hardware_release_yy; // Hardware release xx.yy (xx, yy = bcd format) buffer[12,13] = CRC16; // CRC-16 /* GET BUS VOLTAGE */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x02; // Response to g2 command buffer[10] = lamp_voltage_h; // High byte of lamp voltage buffer[11] = lamp_voltage_l; // Low byte of lamp voltage buffer[12,13] = CRC16; // CRC-16 /* GET HARDWARE STATUS */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x03; // Response to g3 command buffer[10] = hardware_status_h; // High byte of hardware status buffer[11] = hardware_status_l; // Low byte of hardware status buffer[12,13] = CRC16; // CRC-16 30/47 DocID026935 Rev 1 UM1818 HID commands /* hardware_status value */ 0x00 = IDLE 0x01,0x02,0x03 = STARTUP 0x04,0x05 = WARMUP 0x06 = RUN 0x07 = WAIT 0x08 = FAILURE /* GET LAMP POWER */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x04; // Response to g4 command buffer[10] = lamp_power_h; // High byte of lamp power buffer[11] = lamp_power_l; // Low byte of lamp power buffer[12,13] = CRC16; // CRC-16 /* GET LAST FAILURE */ buffer[0] = 18; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x05; // Response to g5 command buffer[10] = hardware_status_h; // High byte of hardware status before the failure buffer[11] = hardware_status_l; // Low byte of hardware status before the failure buffer[12] = bus_voltage_h; // High byte of bus voltage before the failure buffer[13] = bus_voltage_l; // Low byte of bus voltage before the failure buffer[14] = lamp_voltage_h; // High byte of lamp voltage before the failure buffer[15] = lamp_voltage_l; // Low byte of lamp voltage before the failure buffer[16,17] = CRC16; // CRC-16 DocID026935 Rev 1 31/47 47 HID commands UM1818 /* GET POWER SUPPLY VOLTAGE */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x06; // Response to g6 command buffer[10] = input_voltage_h; // High byte of power supply voltage buffer[11] = input_voltage_l; // Low byte of power supply voltage buffer[12,13] = CRC16; // CRC-16 /* GET BOARD TEMPERATURE (°C) */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[1] = APP_DATA_FRAME; // Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x07; // Response to g7 command buffer[10] = board_temperature_h; // High byte of board temperature (°C) buffer[11] = board_temperature_l; // Low byte of board temperature (°C) buffer[12,13] = CRC16; // CRC-16 /* GET N° OF POWER ON */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x08; // Response to g8 command buffer[10] = power_on_n_h; // High byte of number of lamp power on buffer[11] = power_on_n_l; // Low byte of number of lamp power on buffer[12,13] = CRC16; // CRC-16 32/47 DocID026935 Rev 1 UM1818 HID commands /* GET LAMP LIFETIME (Hours) */ buffer[0] = 14; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address;// Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x09; // Response to g9 command buffer[10] = lamp_lifetime_h; // High byte of lamp lifetime (hours) buffer[11] = lamp_lifetime_l; // Low byte of lamp lifetime (hours) buffer[12,13] = CRC16; // CRC-16 /* GET ALL PARAMETERS */ buffer[0] = 36; // Data frame payload length buffer[1] = APP_DATA_FRAME; // Data frame type buffer[2,..7] = source_module.address; // Source device address (6 bytes) buffer[8] = 0x67; // Get command 'g' ascii value buffer[9] = 0x0a; // Response to g10 command buffer[10] = hardware_release_xx; // Hardware release xx.yy (xx, yy = bcd format) buffer[11] = hardware_release_yy; // Hardware release xx.yy (xx, yy = bcd format) buffer[12] = bus_voltage_h; // High byte of bus voltage before the failure buffer[13] = bus_voltage_l; // Low byte of bus voltage before the failure buffer[14] = lamp_voltage_h; // High byte of lamp voltage before the failure buffer[15] = lamp_voltage_l; // Low byte of lamp voltage before the failure buffer[16] = hardware_status_h; // High byte of hardware status before the failure buffer[17] = hardware_status_l; // Low byte of hardware status before the failure buffer[18] = lamp_power_h; // High byte of lamp power buffer[19] = lamp_power_l; // Low byte of lamp power buffer[20] = last_hardware_status_h; // High byte of hardware status before the failure buffer[21] = last_hardware_status_l; // Low byte of hardware status before the failure DocID026935 Rev 1 33/47 47 HID commands UM1818 buffer[22] = last_bus_voltage_h; // High byte of bus voltage before the failure buffer[23] = last_bus_voltage_l; // Low byte of bus voltage before the failure buffer[24] = last_lamp_voltage_h; // High byte of lamp voltage before the failure buffer[25] = last_lamp_voltage_l; // Low byte of lamp voltage before the failure buffer[26] = input_voltage_h; // High byte of power supply voltage buffer[27] = input_voltage_l; // Low byte of power supply voltage buffer[28] = board_temperature_h; // High byte of board temperature (°C) buffer[29] = board_temperature_l; // Low byte of board temperature (°C) buffer[30] = power_on_n_h; // High byte of number of lamp power on buffer[31] = power_on_n_l; // Low byte of number of lamp power on buffer[32] = lamp_lifetime_h; // High byte of lamp lifetime (hours) buffer[33] = lamp_lifetime_l; // Low byte of lamp lifetime (hours) buffer[34,35] = CRC16; // CRC-16 If an error occurs from the HID board or from the network, the following frame throughout the COMM will be sent: /* ERROR FRAME RESPONSE */ buffer[0] = 12; // Error frame payload length buffer[1] = APP_ERROR_FRAME; // Error frame type buffer[4,5,6,7] = target_module.address; // Target device address (6 bytes) buffer[8,9] = HID_error_code; // HID board error code (2 bytes) buffer[10,11] = CRC16; // CRC-16 /* HID_error_code value */ 0x10 = HID response error 0x11 = HID command unknown 0x12 = HID board response timeout 0x13 = HID packet delivery impossible 34/47 DocID026935 Rev 1 UM1818 Schematic diagrams and bill of material Appendix B Schematic diagrams Figure 12. Schematic diagram (1 of 5) VDDIO 8 7 6 5 VDDIO 8 7 6 5 VDDIO R1 RP1 4 x 10K CAT16-J4 R3 1 2 3 4 1 2 3 4 R2 RP2 10K 4 x 10K 0402 CAT16-J4 0R 0402 0R 0402 LD1 100n 16V 0402 VDDIO VDDIO PLC_RESETN VDD C10 100n 16V 0402 GND_A TXD RXD VDDIO TRSTN TMS GND TCK TDO TDI RESETN VDD XIN CL_SEL VSSA VDDI O GND NC RESERVED NC NC VDDI O VVD_ REG_1V8 PA_OUT VSS VDDIO EP C2 0402 100n 16V CL_SEL 36 35 34 33 32 31 30 29 28 27 26 25 C7 0402 100n 16V GND_A VDDIO VDD_REG_1V8 PA_OUT L1 BLM21PG300SN1 0805 49 C8 0805 10u 16V C12 100n 16V 0402 C11 10u 16V 0805 GND_A VCC C17 100p 25V 0402 GND_A VDDIO 560R 0603 560R 0603 HSMF-C155 LEDSMD VDD_PLL C19 100n 16V 0402 GND_A R6 Transceiver Module ZC_IN RX_IN TX_OUT PA_IN+ PA_INCL C16 4u7 16V 0805 PL_TX_ON U2 ST7580 VFQFPN48 RESERV ED 5 RESERV ED 4 V DD GN D RESERV ED 3 RESERV ED 2 RESERV ED 1 PL_TX _ON BR0 BR1 T_REQ PL_RX_ON 48 47 46 45 44 43 42 41 40 39 38 37 C4 100n 16V 0402 L2 R9 10K 0402 VDDIO 1 2 3 4 5 6 7 8 9 10 11 12 R4 X OU T GN D V SSA V D D _PLL V CCA ZC_I N RX_IN TX_OUT PA_IN+ PA_INCL V CC R10 10K 0402 PLC_TXD PLC_RXD 8MHZ_MCO VDDIO R38 10K 0402 PL_RX_ON 13 14 15 16 17 18 19 20 21 22 23 24 R8 10K 0402 BR0 BR1 T_REQ C1 BLM21PG331SN1 C20 100n 16V 0402 C18 10u 16V 0805 GND_A VCC_A GND_A C24 100n 16V 0402 C22 100p 25V 0402 GND_A R15 130R 0402 R16 330R 0402 VDDIO R17 10K 0402 3 C21 10u 16V 0805 1 2 B.1 Schematic diagrams and bill of material Q1 2N7002 CL_SEL Current Limit Setting GSPG25092014DI1530 DocID026935 Rev 1 35/47 47 Schematic diagrams and bill of material UM1818 Figure 13. Schematic diagram (2 of 5) LD2 VDDIO 560R 0603 560R 0603 R39 R40 PLC_RESETN C5 22p 50V 0402 PLM_GPIO6 PLM_GPIO7 18 19 20 39 40 41 42 43 PLM_GPIO4 PLM_GPIO5 PL_RX_ON PL_TX_ON SPI_NSS SPI_SCK SPI_MISO SPI_MOSI 45 46 21 22 25 26 27 28 FOXSDLF/080-20 5 6 X2 C9 22p 50V 0402 R11 1M 0402 VDDIO L3 VDDA BLM18AG102SN1D 0603 PA0-WKUP PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB8 PB9 PB10 PB11 PB12 PB13 PB14 PB15 PA8 PA9 PA10 PA11 PA12 PA13/JTMS/SWDIO PA14/JTCK/SWCLK PA15/JTDI PC13/TAMPER_RTC OSC_IN/PD0 OSC_OUT/PD1 PC14/OSC32_IN PC15/OSC32_OUT VBAT 24 36 48 9 VBAT VDDIO PB0 PB1 PB2/BOOT1 PB3/JTDO PB4/JNTRST PB5 PB6 PB7 1 BT1 CR2032/1HF Host Co ntroller R14 10K 0402 U1 HSMF-C155 LED_RED LEDSMD LED_GREEN BOOT1 JTAG_TDO JTAG_TRST R5 330R 0402 VDDIO BOOT0 NRST VDD_1 VDD_2 VDD_3 VDDA VSS_1 VSS_2 VSS_3 VSSA 10 11 12 13 14 15 16 17 T_REQ PLC_RXD PLC_TXD PLM_GPIO0 PLM_GPIO1 PLM_GPIO2 PLM_GPIO3 29 30 31 32 33 34 37 38 8MHZ_MCO USART_TX USART_RX STM32_USB_DM STM32_USB_DP JTAG_TMS JTAG_TCK JTAG_TDI 2 3 4 OSC32_IN OSC32_OUT 44 7 BOOT0 RESET_uP 23 35 47 8 (uP Tx) (uP Rx) C3 10p 50V X1 0402 MC-306 C6 R12 10p 50V 0402 VDDIO R13 10K 0402 10K 0402 C13 100n 16V 0402 IC-STM32F103CBT7 C14 10u 16V 0805 C15 100n 16V 0402 VDDIO C23 10u 16V 0805 C37 100n 16V 0402 C38 100n 16V 0402 C39 100n 16V 0402 GSPG25092014DI1535 Figure 14. Schematic diagram (3 of 5) TP1 ZC_IN VCC_A R18 D1 L 1 VCC_A 33K 1206 R19 22K 0402 4 C29 U3 3 ZC_IN 1 2 R22 100K 0805 HCPL-181-000E R30 33K 0402 100n 16V 0402 R32 10M 0402 Q2 BC847 SOT23 GND_A STTH1L06A DO-214AC R25 R26 33K 1206 33K 1206 N Isolated ZeroCrossing GND_A GSPG25092014DI1545 36/47 DocID026935 Rev 1 UM1818 Schematic diagrams and bill of material Figure 15. Schematic diagram (4 of 5) C25 100p 25V 0402 C26 27p 50V 0402 VCC C28 TP2 TX_OUT 1 R24 47K 0402 C31 100n 16V 0402 1K5 100n 16V 0402 R33 0402 47K 0402 VCC 0402 4.7p 50V R21 33K 0402 10K 0402 VCC R23 24K 0402 D2 STPS1L30A DO-214AC(SMA) C30 10u 50V 1210 R31 24K 0402 D3 STPS1L30A DO-214AC(SMA) PA_IN- R27 TX_OUT R20 C27 R28 5K1 C33 1n 50V 0402 R29 0402 22K 0402 PA PA_IN+ PA_OUT C34 100p 25V 0402 COMM ZT1 8 1 RX_IN C32 L4 L 220nX2 250Vac 18x8x16 D4 SM6T15CA SMB N 10u 2.0A R34 150R 0603 TP3 1:1 1 C35 10n 50V 0603 5 4 T60403-K5024-X044 RX_IN J2 L5 100u 350 mA SMD Power Line Coupling Section C36 18n 50V 0603 D5 SMAJ5.0CA DO214 COMM L N 5 4 3 2 1 90121-0765 GSPG25092014DI1550 Figure 16. Schematic diagram (5 of 5) JTAG Interface 8 7 6 5 VDDIO RP3 4 x 10K CAT16-J4 1 2 3 4 J1 JTAG_TRST JTAG_TDI JTAG_TMS JTAG_TCK JTAG_TDO RESET_uP R7 B.2 90120-0768 10K 0402 GSPG25092014DI1555 1 2 3 4 5 6 7 8 Bill of material (BOM) Table 1. Bill of material Part type MI code 100n 16V C1, C2, C4, C7, C10, C12, C13, C15, MI015 C19, C20, 6 C24, C28, C29, C31, C37, C38, C39 10p 50V MI020 7 Design. C3, C6 Footprint Description Qty Manufact. Order code 0402_C Ceramic Capacitor 100n 16V 0402 17 0402YG1 04ZAT2A 698-3190 0402_C Ceramic Capacitor 10p 50V X7R 5% 2 04025A10 0DAT2A 698-3065 DocID026935 Rev 1 Part number Order code 2 37/47 47 Schematic diagrams and bill of material UM1818 Table 1. Bill of material (continued) Part type 22p 50V 10u 16V MI code Footprint C5, C9 0402_C Ceramic Capacitor 22p 50V 2 GRM1555 C1H220J Z01D 624-2187 0805S_C Ceramic Capacitor 10u 16V X5R 10% 6 GRM21B R61C106 KE15L 723-6039 0805S_C Ceramic Capacitor 4u7 16V 0805 +/-15% 1 GRM21B R61C475 KA88L 723-6041 0402_C Ceramic Capacitor 100p 25V 0402 4 04023A10 1JAT2A 698-3055 0402_C Ceramic Capacitor 27p 50V COG 0402 1 GRM1555 C1H270J A01D 723-5402 0402_C Ceramic Capacitor 4.7p 50V COG 0402 1 GRM1555 C1H4R7B A01D 723-5436 1210 Ceramic Capacitor 10u 50V 1210 X7R 1 UMK325B J106MMT 758-3486 RADX2152 Metallized Polyester Film Dielectric 220n 250Vac pitch 15mm 1 ECQU2A2 24ML 1198297 0402_C Ceramic Capacitor 1n 50V X7R 10% 1 04025C10 2KAT2A 698-3131 1 C0603C1 03K5RAC 264-4595 1 C0603C1 1865536R 83K5RAC L TU C8, C11, MI013 C14, C18, 6 C21, C23 4u7 16V C16 100p 25V C17, C22, C25, C34 27p 50V 4.7p 50V 10u 50V 220n X2 250V ac 1n 50V C26 C27 C30 C32 C33 Description Qty Manufact. 10n 50V C35 0603S_C Ceramic Capacitor 10n 50V X7R 10% 18n 50V C36 0603S_C Ceramic Capacitor 18n 50V 38/47 Order code Design. DocID026935 Rev 1 Part number Order code 2 CL10B183KB8 NNNC 766-5392 UM1818 Schematic diagrams and bill of material Table 1. Bill of material (continued) Part type MI code STT MI002 H1L0 0 6A Part number Order code 2 STTH1L0 6A 8165505 STTH1L06A 485-8500 2 STPS1L3 0 485-8061 STPS1L30A 497-65771-ND SMAJ5.0CA-TR 9802860R L Footprint Description Qty Manufact. D1 DO214AA DIODO FAST RECOVERY 1 LOW DROP POWER SMA_DIO SCHOTTKY DE RECTIFIER 1A 30V 0.3V STP S1L3 0A D2, D3 SM6 T15C A D4 SMA J5.0 CA Order code Design. D5 SMB TRANSIL Diode 15V 600W 1 SM6T15C A 436-9757 DO214 Diode TVS BiDirectional 5V 400W DO214AC 1 SMAJ5.0 CA 764-5568 Connector Male 2.54mm pitch SIL RA 1 901210765 2 01088312 1 9012 10765 J2 SIP5_RA 0108 8312 1 J3, J4 FKV12LN _STRIP_ MIRROR BLM 21P G300 SN1 L1 0805S EMI Filter 30R 100 MHz 0805 1 BLM21PG 300SN1 BLM 21P G331 SN1 L2 0805S EMI Filter 330R 100 MHz 1 BLM21PG 331SN1 BLM 21P G300 SN1 L1 0805S EMI Filter 30R 100 MHz 0805 1 BLM21PG 300SN1 BLM 21P G331 SN1 L2 0805S EMI Filter 330R 100 MHz 1 BLM21PG 331SN1 724-1545 0603S EMI Filter BLM 1K 100MHz 400mA 1 BLM18AG 102SN1D 230-3783 BLM 18A MI016 G102 0 SN1 D L3 DocID026935 Rev 1 724-1545 39/47 47 Schematic diagrams and bill of material UM1818 Table 1. Bill of material (continued) Part type MI code Order code Design. Footprint Description Qty Manufact. 10u 2.0A L4 IND_WEPD3 Inductor 10u 2.0A 74454010 1 74454010 74454010 100u 350m A L5 IND_6x6 Inductor 100u 350mA 1 B82462A4 104K 495-8032 HSM FC155 LD1, LD2 HSMFC655 LED Bicolor Verde/Rosso SMD 2 HSMFC155 486-0430 Q1 SOT23 N-channel Trench MOS FET 1 2N7002 112-5526 SOT23A NPN 45 V, 100 mA generalpurpose transistors 1 BC847 445-2023 0402_R Resistor 10K 0.0625W 11 CRG0402 F10K 667-8848 2N70 MI012 02 7 BC84 MI013 7 5 10K Q2 R2, R7, R8, R9, MI016 R10, R12, 7 R13, R14, R17, R20, R38 560R R4, R6, R39, R40 0603S_R Resistor 560R 0.1W 1% 4 CRG0603 F560R 213-2238 330R R5, R16 0402_R Resistor 330R 0.0625W 2 CRG0402 F330R 667-8646 1M R11 0402_R Resistor 1M 0.0625W 1 CRG0402 F1M0 667-9065 130R R15 0402_R Resistor 130R 0.0625W 1 CRG0402 F130R 667-8618 33K R18, R25, R26 1206S_R Resistor 33K 0.33W 1% 3 CRCW12 0633K0F KEA 679-2055 22K R19, R29 0402_R Resistor 22K 0.0625W 1% 2 CRG0402 F22K 667-8892 33K R21, R30 0402_R Resistor 33K 0.0625W 2 CRG0402 F33K 667-8933 R22 0805S_R Resistor 100K 0.125W 1% 1 CRG0805 F100K 223-0691 100K 40/47 MI022 9 DocID026935 Rev 1 Part number Order code 2 UM1818 Schematic diagrams and bill of material Table 1. Bill of material (continued) Part type MI code Footprint 24K R23, R31 0402_R Resistor 24K 0.0625W 1% 2 CRG0402 F24K 667-8909 47K R24, R33 0402_R Resistor 47K 0.0625W 0.1% 2 CRG0402 F47K 667-8943 1K5 R27, R35 0402_R Resistor 1K5 0.063W 1% 2 CRG0402 F1K5 667-8707 5K1 R28 0402_R Resistor 5K1 0.0625W 1% 1 CRCW04 025K10F KED 678-9478 10M R32 0402_R Resistor 10M 0.0625W 1 CRCW04 0210M0F KED 667-8709 150R R34 0603S_R Resistor 150R 0.1W 1% 1 CRG0603 F150R 213-2165 22R R36, R37 0402_R Resistor 22R 0.063W 1% 2 CRG0402 F22R 667-8558 RESPACK Respack MI006 RP1, RP2, _CAT/CAY SMD 4 x 10K 9 RP3 _16 0.25 5% 3 CAT16103J4LF 522-5412 U1 STM32 ARM-based 32-bit MCU with 64 LQFP48_ Kbytes STM Flash, 36-pin VFQFPN, Industrial Temperature 1 STM32F1 03CBT7 714-7689 U2 B-FSK, BPSK, QPSK, 8-PSK VFQFPN4 Multi Mode Power Line 8_7x7x1 Networking System on Chip 1 U3 Phototransist or Optocoupler SMD MiniFlat Type 1 HCPL-181 693-5277 4x 10K ICSTM 32F1 03CB T7 ST75 80 HCP L181000E SO-4 Description Qty Manufact. Order code Design. DocID026935 Rev 1 Part number Order code 2 CAT16103J4LF 1770124 41/47 47 Schematic diagrams and bill of material UM1818 Table 1. Bill of material (continued) Part type USB LC62 MC306 MI code MI021 1 Design. Description Qty Manufact. U4 SOT666 USB Very Low Capacitance ESD Protection X1 TPSM32A Crystal 32.768 KHz FOX SDL F/08 0-20 X2 T604 03K502 4X044 ZT1 42/47 Footprint Order code 1 USBLC62P6 624-7687 1 MC-306 667-6117 SMD Crystal 8.000 MHz 1 8.000MHz 49USMX/ 30/50/40+85/18 pF/ATF 693-8869 Signal TRF_VAC Transformer 5024X044 1:1 1 T60403K5024X044 T60403K5024X044 XTAL2 DocID026935 Rev 1 Part number Order code 2 UM1818 CRC 16 calculation Appendix C CRC 16 calculation The CRC 16 is based on the X16 + X15 + X2 + 1 polynomial. /* Used CRC 16 table */ const uint16_t TableCRC16[256] = { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 }; /* CRC function */ DocID026935 Rev 1 43/47 47 CRC 16 calculation UM1818 /************************************************************************* ****** * Function Name : CalcCRC16 * Description : Calculate a 16 bit CRC (X16 + X15 + X2 + 1) * Input : Buffer pointer, buffer length * Return : Calculated CRC ************************************************************************** *****/ uint16_t CalcCRC16(uint8_t *buf, uint8_t len) { uint16_t crc = 0; while (len--) crc = (crc >> 8) ^ TableCRC16[(crc ^ (*(buf++))) & 0xff]; return (crc); } 44/47 DocID026935 Rev 1 UM1818 5 Reference Reference 1. ARM-based 32-bit MCU STM32F10x standard peripheral library Rel. 3.5.0 (2011) 2. ST7580 FSK, PSK multi-mode power line networking SoC datasheets (2012) 3. UM0932 ST7580 FSK, PSK multi-mode power line networking SoC user manual (2013) 4. AN4018 data link protocol for ST7580 PLM 5. IAR embedded workbench® IDE for STM32 microcontrollers Rel. 6.3 documentation (www.iar.com) DocID026935 Rev 1 45/47 47 Revision history 6 UM1818 Revision history Table 2. Document revision history 46/47 Date Revision 29-May-2015 1 Changes Initial release. DocID026935 Rev 1 UM1818 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. © 2015 STMicroelectronics – All rights reserved DocID026935 Rev 1 47/47 47