ISP example program.

Dependencies:   SLCD mbed USBLocalFileSystem

/media/uploads/va009039/lpc81isp-360x240.jpg

FRDM-KL46ZLPC810
UART RXDPTE23p2(P0_4)
UART TXDPTE22p8(P0_0)
nRESETD6p1(P0_5)
nISPD8p5(P0_1)
GNDGNDp7
3.3VP3V3p6

Copy binary image to the disk called LPC81ISP.
Push sw1 or sw3, start write to LPC810 flash.

Committer:
va009039
Date:
Sun Feb 16 12:56:12 2014 +0000
Revision:
1:cccfc461c61f
Parent:
0:ad2b1fc04955
add virtual COM.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:ad2b1fc04955 1 /*-----------------------------------------------------------------------*/
va009039 0:ad2b1fc04955 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
va009039 0:ad2b1fc04955 3 /*-----------------------------------------------------------------------*/
va009039 0:ad2b1fc04955 4 /* This is a stub disk I/O module that acts as front end of the existing */
va009039 0:ad2b1fc04955 5 /* disk I/O modules and attach it to FatFs module with common interface. */
va009039 0:ad2b1fc04955 6 /*-----------------------------------------------------------------------*/
va009039 0:ad2b1fc04955 7 #include "ffconf.h"
va009039 0:ad2b1fc04955 8 #include "diskio.h"
va009039 0:ad2b1fc04955 9
va009039 0:ad2b1fc04955 10 #include "mbed_debug.h"
va009039 0:ad2b1fc04955 11 #include "FATFileSystem.h"
va009039 0:ad2b1fc04955 12
va009039 0:ad2b1fc04955 13 using namespace mbed;
va009039 0:ad2b1fc04955 14
va009039 0:ad2b1fc04955 15 DSTATUS disk_initialize (
va009039 0:ad2b1fc04955 16 BYTE drv /* Physical drive nmuber (0..) */
va009039 0:ad2b1fc04955 17 )
va009039 0:ad2b1fc04955 18 {
va009039 0:ad2b1fc04955 19 debug_if(FFS_DBG, "disk_initialize on drv [%d]\n", drv);
va009039 0:ad2b1fc04955 20 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_initialize();
va009039 0:ad2b1fc04955 21 }
va009039 0:ad2b1fc04955 22
va009039 0:ad2b1fc04955 23 DSTATUS disk_status (
va009039 0:ad2b1fc04955 24 BYTE drv /* Physical drive nmuber (0..) */
va009039 0:ad2b1fc04955 25 )
va009039 0:ad2b1fc04955 26 {
va009039 0:ad2b1fc04955 27 debug_if(FFS_DBG, "disk_status on drv [%d]\n", drv);
va009039 0:ad2b1fc04955 28 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_status();
va009039 0:ad2b1fc04955 29 }
va009039 0:ad2b1fc04955 30
va009039 0:ad2b1fc04955 31 DRESULT disk_read (
va009039 0:ad2b1fc04955 32 BYTE drv, /* Physical drive nmuber (0..) */
va009039 0:ad2b1fc04955 33 BYTE *buff, /* Data buffer to store read data */
va009039 0:ad2b1fc04955 34 DWORD sector, /* Sector address (LBA) */
va009039 0:ad2b1fc04955 35 BYTE count /* Number of sectors to read (1..255) */
va009039 0:ad2b1fc04955 36 )
va009039 0:ad2b1fc04955 37 {
va009039 0:ad2b1fc04955 38 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on drv [%d]\n", sector, count, drv);
va009039 0:ad2b1fc04955 39 for(DWORD s=sector; s<sector+count; s++) {
va009039 0:ad2b1fc04955 40 debug_if(FFS_DBG, " disk_read(sector %d)\n", s);
va009039 0:ad2b1fc04955 41 int res = FATFileSystem::_ffs[drv]->disk_read((uint8_t*)buff, s);
va009039 0:ad2b1fc04955 42 if(res) {
va009039 0:ad2b1fc04955 43 return RES_PARERR;
va009039 0:ad2b1fc04955 44 }
va009039 0:ad2b1fc04955 45 buff += 512;
va009039 0:ad2b1fc04955 46 }
va009039 0:ad2b1fc04955 47 return RES_OK;
va009039 0:ad2b1fc04955 48 }
va009039 0:ad2b1fc04955 49
va009039 0:ad2b1fc04955 50 #if _READONLY == 0
va009039 0:ad2b1fc04955 51 DRESULT disk_write (
va009039 0:ad2b1fc04955 52 BYTE drv, /* Physical drive nmuber (0..) */
va009039 0:ad2b1fc04955 53 const BYTE *buff, /* Data to be written */
va009039 0:ad2b1fc04955 54 DWORD sector, /* Sector address (LBA) */
va009039 0:ad2b1fc04955 55 BYTE count /* Number of sectors to write (1..255) */
va009039 0:ad2b1fc04955 56 )
va009039 0:ad2b1fc04955 57 {
va009039 0:ad2b1fc04955 58 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on drv [%d]\n", sector, count, drv);
va009039 0:ad2b1fc04955 59 for(DWORD s = sector; s < sector + count; s++) {
va009039 0:ad2b1fc04955 60 debug_if(FFS_DBG, " disk_write(sector %d)\n", s);
va009039 0:ad2b1fc04955 61 int res = FATFileSystem::_ffs[drv]->disk_write((uint8_t*)buff, s);
va009039 0:ad2b1fc04955 62 if(res) {
va009039 0:ad2b1fc04955 63 return RES_PARERR;
va009039 0:ad2b1fc04955 64 }
va009039 0:ad2b1fc04955 65 buff += 512;
va009039 0:ad2b1fc04955 66 }
va009039 0:ad2b1fc04955 67 return RES_OK;
va009039 0:ad2b1fc04955 68 }
va009039 0:ad2b1fc04955 69 #endif /* _READONLY */
va009039 0:ad2b1fc04955 70
va009039 0:ad2b1fc04955 71 DRESULT disk_ioctl (
va009039 0:ad2b1fc04955 72 BYTE drv, /* Physical drive nmuber (0..) */
va009039 0:ad2b1fc04955 73 BYTE ctrl, /* Control code */
va009039 0:ad2b1fc04955 74 void *buff /* Buffer to send/receive control data */
va009039 0:ad2b1fc04955 75 )
va009039 0:ad2b1fc04955 76 {
va009039 0:ad2b1fc04955 77 debug_if(FFS_DBG, "disk_ioctl(%d)\n", ctrl);
va009039 0:ad2b1fc04955 78 switch(ctrl) {
va009039 0:ad2b1fc04955 79 case CTRL_SYNC:
va009039 0:ad2b1fc04955 80 if(FATFileSystem::_ffs[drv] == NULL) {
va009039 0:ad2b1fc04955 81 return RES_NOTRDY;
va009039 0:ad2b1fc04955 82 } else if(FATFileSystem::_ffs[drv]->disk_sync()) {
va009039 0:ad2b1fc04955 83 return RES_ERROR;
va009039 0:ad2b1fc04955 84 }
va009039 0:ad2b1fc04955 85 return RES_OK;
va009039 0:ad2b1fc04955 86 case GET_SECTOR_COUNT:
va009039 0:ad2b1fc04955 87 if(FATFileSystem::_ffs[drv] == NULL) {
va009039 0:ad2b1fc04955 88 return RES_NOTRDY;
va009039 0:ad2b1fc04955 89 } else {
va009039 0:ad2b1fc04955 90 DWORD res = FATFileSystem::_ffs[drv]->disk_sectors();
va009039 0:ad2b1fc04955 91 if(res > 0) {
va009039 0:ad2b1fc04955 92 *((DWORD*)buff) = res; // minimum allowed
va009039 0:ad2b1fc04955 93 return RES_OK;
va009039 0:ad2b1fc04955 94 } else {
va009039 0:ad2b1fc04955 95 return RES_ERROR;
va009039 0:ad2b1fc04955 96 }
va009039 0:ad2b1fc04955 97 }
va009039 0:ad2b1fc04955 98 case GET_BLOCK_SIZE:
va009039 0:ad2b1fc04955 99 *((DWORD*)buff) = 1; // default when not known
va009039 0:ad2b1fc04955 100 return RES_OK;
va009039 0:ad2b1fc04955 101
va009039 0:ad2b1fc04955 102 }
va009039 0:ad2b1fc04955 103 return RES_PARERR;
va009039 0:ad2b1fc04955 104 }