Sample IAP test code for Nucleo_F091RC

Committer:
narasimma23
Date:
Sat Jun 17 07:00:41 2017 +0000
Revision:
0:de2687a62a94
Sample IAP test code for Nucleo_F091RC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
narasimma23 0:de2687a62a94 1 /**
narasimma23 0:de2687a62a94 2 * Author: Narasimma DLN
narasimma23 0:de2687a62a94 3 * Email: narasimma23@gmail.com
narasimma23 0:de2687a62a94 4 */
narasimma23 0:de2687a62a94 5
narasimma23 0:de2687a62a94 6 #include "mbed.h"
narasimma23 0:de2687a62a94 7 #include "stm_iap.h"
narasimma23 0:de2687a62a94 8
narasimma23 0:de2687a62a94 9 #define BUFFER_LEN 4096
narasimma23 0:de2687a62a94 10
narasimma23 0:de2687a62a94 11 // Debug Serial Port
narasimma23 0:de2687a62a94 12 RawSerial pc(PB_3, PD_2);
narasimma23 0:de2687a62a94 13 DigitalOut led(PB_12);
narasimma23 0:de2687a62a94 14
narasimma23 0:de2687a62a94 15 static uint8_t recBuf[BUFFER_LEN];
narasimma23 0:de2687a62a94 16 static int recBufLen;
narasimma23 0:de2687a62a94 17 bool startProgram = false;
narasimma23 0:de2687a62a94 18
narasimma23 0:de2687a62a94 19 /* Serial RX IRQ function */
narasimma23 0:de2687a62a94 20 void serial_callback(void)
narasimma23 0:de2687a62a94 21 {
narasimma23 0:de2687a62a94 22 if (pc.readable()) {
narasimma23 0:de2687a62a94 23 //pc.putc(pc.getc());
narasimma23 0:de2687a62a94 24 recBuf[recBufLen++] = pc.getc();
narasimma23 0:de2687a62a94 25
narasimma23 0:de2687a62a94 26 if (recBufLen == BUFFER_LEN)
narasimma23 0:de2687a62a94 27 startProgram = true;
narasimma23 0:de2687a62a94 28 }
narasimma23 0:de2687a62a94 29 }
narasimma23 0:de2687a62a94 30
narasimma23 0:de2687a62a94 31 void processBuffer(void)
narasimma23 0:de2687a62a94 32 {
narasimma23 0:de2687a62a94 33 IAPCode ret;
narasimma23 0:de2687a62a94 34 uint32_t addr = 0x08000000;
narasimma23 0:de2687a62a94 35
narasimma23 0:de2687a62a94 36 pc.printf("Processing Buffer...!\r\n");
narasimma23 0:de2687a62a94 37
narasimma23 0:de2687a62a94 38 // Testing Flash Erase
narasimma23 0:de2687a62a94 39 ret = erase_sector(addr);
narasimma23 0:de2687a62a94 40 pc.printf("Erasing the Sector: %x, ret: %d\r\n", addr, ret);
narasimma23 0:de2687a62a94 41
narasimma23 0:de2687a62a94 42 // Testing Flash Program
narasimma23 0:de2687a62a94 43 ret = program_flash(addr, (uint16_t *)recBuf, FLASH_SECTOR_SIZE);
narasimma23 0:de2687a62a94 44 pc.printf("Flashing done: %d\r\n", ret);
narasimma23 0:de2687a62a94 45
narasimma23 0:de2687a62a94 46 recBufLen = 0;
narasimma23 0:de2687a62a94 47 startProgram = false;
narasimma23 0:de2687a62a94 48 }
narasimma23 0:de2687a62a94 49
narasimma23 0:de2687a62a94 50 int main(void)
narasimma23 0:de2687a62a94 51 {
narasimma23 0:de2687a62a94 52 uint8_t *ptr, ret;
narasimma23 0:de2687a62a94 53 uint32_t addr = FLASH_START_ADDR;
narasimma23 0:de2687a62a94 54
narasimma23 0:de2687a62a94 55 pc.baud(115200);
narasimma23 0:de2687a62a94 56 pc.printf("NUCLEO_F092RC In-App Programming Test!\r\n");
narasimma23 0:de2687a62a94 57 pc.attach(&serial_callback, Serial::RxIrq);
narasimma23 0:de2687a62a94 58
narasimma23 0:de2687a62a94 59 pc.printf("FLASH SIZE = %d\r\n", get_flash_size());
narasimma23 0:de2687a62a94 60 get_flash_sectors();
narasimma23 0:de2687a62a94 61
narasimma23 0:de2687a62a94 62 // Test Reading a byte from Flash
narasimma23 0:de2687a62a94 63 ptr = (uint8_t *)addr;
narasimma23 0:de2687a62a94 64 pc.printf("First byte: %x\r\n", ptr[1]);
narasimma23 0:de2687a62a94 65
narasimma23 0:de2687a62a94 66 addr = FLASH_PAGE_SIZE;
narasimma23 0:de2687a62a94 67 pc.printf("FLASH_PAGE_SIZE: %d\r\n", addr);
narasimma23 0:de2687a62a94 68
narasimma23 0:de2687a62a94 69 // Testing sector_number function and sector_size
narasimma23 0:de2687a62a94 70 addr = 0x08009000;
narasimma23 0:de2687a62a94 71 pc.printf("Get Sector No. for addr 0x%08x is: %d and size is: %d\r\n", addr, get_sector_number(addr), get_sector_size(addr));
narasimma23 0:de2687a62a94 72
narasimma23 0:de2687a62a94 73 // Testing Flash Erase
narasimma23 0:de2687a62a94 74 ret = erase_sector(addr);
narasimma23 0:de2687a62a94 75 pc.printf("Erase Sector: %d\r\n", ret);
narasimma23 0:de2687a62a94 76
narasimma23 0:de2687a62a94 77 while(1) {
narasimma23 0:de2687a62a94 78 wait(1);
narasimma23 0:de2687a62a94 79 led = !led;
narasimma23 0:de2687a62a94 80
narasimma23 0:de2687a62a94 81 pc.printf("Len: %d\r\n", recBufLen);
narasimma23 0:de2687a62a94 82
narasimma23 0:de2687a62a94 83 if (startProgram)
narasimma23 0:de2687a62a94 84 processBuffer();
narasimma23 0:de2687a62a94 85 }
narasimma23 0:de2687a62a94 86 }