Esta versión v6 pasa a ser el nuevo master. Funciona correctamente

Dependencies:   ADXL345 Display1602 MSCFileSystem SDFileSystem mbed FATFileSystem

Committer:
JuanManuelAmador
Date:
Fri Jun 06 08:52:28 2014 +0000
Revision:
2:cc4a43d806e2
Parent:
0:a5367bd4e404
Correci?n del baudrate de 112500 a 115200

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jjmedina 0:a5367bd4e404 1 /* USB Mass Storage device file system
jjmedina 0:a5367bd4e404 2 * Copyrigh (c) 2010, Igor Skochinsky
jjmedina 0:a5367bd4e404 3 * based on SDFileStorage
jjmedina 0:a5367bd4e404 4 * Copyright (c) 2008-2009, sford
jjmedina 0:a5367bd4e404 5 */
jjmedina 0:a5367bd4e404 6
jjmedina 0:a5367bd4e404 7 /* Introduction
jjmedina 0:a5367bd4e404 8 * ------------
jjmedina 0:a5367bd4e404 9 * TODO: write one
jjmedina 0:a5367bd4e404 10 * we're basically using NXP's USBHotLite sample code, just plugging in our own FAT library
jjmedina 0:a5367bd4e404 11 */
jjmedina 0:a5367bd4e404 12
jjmedina 0:a5367bd4e404 13 #include "MSCFileSystem.h"
jjmedina 0:a5367bd4e404 14 #include "usbhost_inc.h"
jjmedina 0:a5367bd4e404 15
jjmedina 0:a5367bd4e404 16 MSCFileSystem::MSCFileSystem(const char* name) :
jjmedina 0:a5367bd4e404 17 FATFileSystem(name)
jjmedina 0:a5367bd4e404 18 {
jjmedina 0:a5367bd4e404 19 }
jjmedina 0:a5367bd4e404 20
jjmedina 0:a5367bd4e404 21 void print_inquiry(USB_INT08U *inqReply)
jjmedina 0:a5367bd4e404 22 {
jjmedina 0:a5367bd4e404 23 // see USB Mass Storage Class – UFI Command Specification,
jjmedina 0:a5367bd4e404 24 // 4.2 INQUIRY Command
jjmedina 0:a5367bd4e404 25 printf("Inquiry reply:\n");
jjmedina 0:a5367bd4e404 26 uint8_t tmp = inqReply[0]&0x1F;
jjmedina 0:a5367bd4e404 27 printf("Peripheral device type: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 28 if ( tmp == 0 )
jjmedina 0:a5367bd4e404 29 printf("\t- Direct access (floppy)\n");
jjmedina 0:a5367bd4e404 30 else if ( tmp == 0x1F )
jjmedina 0:a5367bd4e404 31 printf("\t- none (no FDD connected)\n");
jjmedina 0:a5367bd4e404 32 else
jjmedina 0:a5367bd4e404 33 printf("\t- unknown type\n");
jjmedina 0:a5367bd4e404 34 tmp = inqReply[1] >> 7;
jjmedina 0:a5367bd4e404 35 printf("Removable Media Bit: %d\n", tmp);
jjmedina 0:a5367bd4e404 36 tmp = inqReply[2] & 3;
jjmedina 0:a5367bd4e404 37 printf("ANSI Version: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 38 if ( tmp != 0 )
jjmedina 0:a5367bd4e404 39 printf("\t- warning! must be 0\n");
jjmedina 0:a5367bd4e404 40 tmp = (inqReply[2]>>3) & 3;
jjmedina 0:a5367bd4e404 41 printf("ECMA Version: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 42 if ( tmp != 0 )
jjmedina 0:a5367bd4e404 43 printf("\t- warning! should be 0\n");
jjmedina 0:a5367bd4e404 44 tmp = inqReply[2]>>6;
jjmedina 0:a5367bd4e404 45 printf("ISO Version: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 46 if ( tmp != 0 )
jjmedina 0:a5367bd4e404 47 printf("\t- warning! should be 0\n");
jjmedina 0:a5367bd4e404 48 tmp = inqReply[3] & 0xF;
jjmedina 0:a5367bd4e404 49 printf("Response Data Format: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 50 if ( tmp != 1 )
jjmedina 0:a5367bd4e404 51 printf("\t- warning! should be 1\n");
jjmedina 0:a5367bd4e404 52 tmp = inqReply[4];
jjmedina 0:a5367bd4e404 53 printf("Additional length: %02Xh\n", tmp);
jjmedina 0:a5367bd4e404 54 if ( tmp != 0x1F )
jjmedina 0:a5367bd4e404 55 printf("\t- warning! should be 1Fh\n");
jjmedina 0:a5367bd4e404 56 printf("Vendor Information: '%.8s'\n", &inqReply[8]);
jjmedina 0:a5367bd4e404 57 printf("Product Identification: '%.16s'\n", &inqReply[16]);
jjmedina 0:a5367bd4e404 58 printf("Product Revision: '%.4s'\n", &inqReply[32]);
jjmedina 0:a5367bd4e404 59 }
jjmedina 0:a5367bd4e404 60
jjmedina 0:a5367bd4e404 61 int MSCFileSystem::initialise_msc()
jjmedina 0:a5367bd4e404 62 {
jjmedina 0:a5367bd4e404 63 USB_INT32S rc;
jjmedina 0:a5367bd4e404 64 USB_INT08U inquiryResult[INQUIRY_LENGTH];
jjmedina 0:a5367bd4e404 65
jjmedina 0:a5367bd4e404 66 //print_clock();
jjmedina 0:a5367bd4e404 67 Host_Init(); /* Initialize the host controller */
jjmedina 0:a5367bd4e404 68 rc = Host_EnumDev(); /* Enumerate the device connected */
jjmedina 0:a5367bd4e404 69 if (rc != OK)
jjmedina 0:a5367bd4e404 70 {
jjmedina 0:a5367bd4e404 71 fprintf(stderr, "Could not enumerate device: %d\n", rc);
jjmedina 0:a5367bd4e404 72 return rc;
jjmedina 0:a5367bd4e404 73 }
jjmedina 0:a5367bd4e404 74
jjmedina 0:a5367bd4e404 75
jjmedina 0:a5367bd4e404 76 /* Initialize the mass storage and scsi interfaces */
jjmedina 0:a5367bd4e404 77 rc = MS_Init( &_blkSize, &_numBlks, inquiryResult );
jjmedina 0:a5367bd4e404 78 if (rc != OK)
jjmedina 0:a5367bd4e404 79 {
jjmedina 0:a5367bd4e404 80 fprintf(stderr, "Could not initialize mass storage interface: %d\n", rc);
jjmedina 0:a5367bd4e404 81 return rc;
jjmedina 0:a5367bd4e404 82 }
jjmedina 0:a5367bd4e404 83 printf("Successfully initialized mass storage interface; %d blocks of size %d\n", _numBlks, _blkSize);
jjmedina 0:a5367bd4e404 84 print_inquiry(inquiryResult);
jjmedina 0:a5367bd4e404 85 // FATFileSystem supports only 512-byte blocks
jjmedina 0:a5367bd4e404 86 return _blkSize == 512 ? OK : 1;
jjmedina 0:a5367bd4e404 87 }
jjmedina 0:a5367bd4e404 88
jjmedina 0:a5367bd4e404 89 int MSCFileSystem::disk_initialize()
jjmedina 0:a5367bd4e404 90 {
jjmedina 0:a5367bd4e404 91 if ( initialise_msc() != OK )
jjmedina 0:a5367bd4e404 92 return 1;
jjmedina 0:a5367bd4e404 93
jjmedina 0:a5367bd4e404 94 return 0;
jjmedina 0:a5367bd4e404 95 }
jjmedina 0:a5367bd4e404 96
jjmedina 0:a5367bd4e404 97 int MSCFileSystem::disk_write(const char *buffer, int block_number)
jjmedina 0:a5367bd4e404 98 {
jjmedina 0:a5367bd4e404 99 if ( OK == MS_BulkSend(block_number, 1, (USB_INT08U *)buffer) )
jjmedina 0:a5367bd4e404 100 return 0;
jjmedina 0:a5367bd4e404 101 return 1;
jjmedina 0:a5367bd4e404 102 }
jjmedina 0:a5367bd4e404 103
jjmedina 0:a5367bd4e404 104 int MSCFileSystem::disk_read(char *buffer, int block_number)
jjmedina 0:a5367bd4e404 105 {
jjmedina 0:a5367bd4e404 106 if ( OK == MS_BulkRecv(block_number, 1, (USB_INT08U *)buffer) )
jjmedina 0:a5367bd4e404 107 return 0;
jjmedina 0:a5367bd4e404 108 return 1;
jjmedina 0:a5367bd4e404 109 }
jjmedina 0:a5367bd4e404 110
jjmedina 0:a5367bd4e404 111 int MSCFileSystem::disk_status() { return 0; }
jjmedina 0:a5367bd4e404 112 int MSCFileSystem::disk_sync() { return 0; }
jjmedina 0:a5367bd4e404 113 int MSCFileSystem::disk_sectors() { return _numBlks; }