SLAU533D September   2013  – April 2017

 

  1.   MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP)
    1.     Trademarks
    2. 1 Getting Started
      1. 1.1 Key Features
      2. 1.2 Kit Contents
      3. 1.3 Out-of-Box Experience
        1. 1.3.1 Step 1: Install a Software Development Platform
        2. 1.3.2 Step 2: Connect the Hardware
        3. 1.3.3 Step 3: Verify the storage volume has been loaded
        4. 1.3.4 Step 4: Open a text editor, and press the buttons
        5. 1.3.5 Step 5: Customize the strings
    3. 2 Hardware
      1. 2.1 Block Diagram
      2. 2.2 Hardware Features
        1. 2.2.1 MSP430F5529
        2. 2.2.2 eZ-FET lite Onboard Emulator
        3. 2.2.3 Integrated Full-Speed USB Hub
        4. 2.2.4 Power
        5. 2.2.5 Clocking
        6. 2.2.6 Application (or "Backchannel") UART
        7. 2.2.7 Emulator and Target Isolation Jumper Block
        8. 2.2.8 Isolation Jumper Block: 3.3-V and 5-V Jumpers
        9. 2.2.9 Isolation Jumper Block: Emulator Connection and Application UART
      3. 2.3 Measure Current Draw of MSP430 MCU
      4. 2.4 Using an External Power Source
        1. 2.4.1 External 3.3-V Power Source
        2. 2.4.2 External 5-V Power Source Without USB Connection
        3. 2.4.3 External 5-V Power Source With USB Connection
      5. 2.5 Using the eZ-FET lite Emulator With a Different Target
      6. 2.6 USB BSL Button
      7. 2.7 BoosterPack Plug-in Module Pinout
      8. 2.8 Design Files
      9. 2.9 Hardware Change Log
    4. 3 Software Examples
      1. 3.1 MSP430 Software Libraries: driverlib and the USB API
      2. 3.2 Viewing the Code
        1. 3.2.1 CCS
        2. 3.2.2 IAR
      3. 3.3 Example Project Software Organization
      4. 3.4 USB Configuration Files
      5. 3.5 Out-of-Box Experience: emulStorageKeyboard
        1. 3.5.1  Flowchart
        2. 3.5.2  Pre-Initialization
        3. 3.5.3  Initialization
          1. 3.5.3.1 Configuring the Keyboard
          2. 3.5.3.2 Configuring the MSC Interface
        4. 3.5.4  Handling SCSI Commands
        5. 3.5.5  LPM0 Entry
        6. 3.5.6  LPM0 Exit
        7. 3.5.7  Emulated Storage Volume
        8. 3.5.8  Sending Data as a USB Keyboard
        9. 3.5.9  Properly Handling USB Unplug Events
        10. 3.5.10 Non-Maskable Interrupt (NMI) Vector
      6. 3.6 Example: simpleUsbBackchannel
        1. 3.6.1 What It Does
        2. 3.6.2 Installing the CDC Interface
        3. 3.6.3 Operating the Example
        4. 3.6.4 Backchannel UART Library: bcUart.c, bcUart.h
        5. 3.6.5 Code Description: Initialization
          1. 3.6.5.1 Stopping the Watchdog
          2. 3.6.5.2 Configuring VCORE
          3. 3.6.5.3 Configuring Clocks
          4. 3.6.5.4 Configuring Ports
          5. 3.6.5.5 Initializing the Backchannel UART
          6. 3.6.5.6 Configuring USB
        6. 3.6.6 Code Description: Main Loop
        7. 3.6.7 Modifying to Use an HID-Datapipe Interface
      7. 3.7 Starting Device Manager
    5. 4 Additional Resources
      1. 4.1 LaunchPad Development Kit Websites
      2. 4.2 Information on the MSP430F5529
      3. 4.3 Download CCS, IAR, mspgcc, or Energia
      4. 4.4 USB Developers Package
      5. 4.5 MSP430Ware and TI Resource Explorer
      6. 4.6 F5529 Code Examples
      7. 4.7 MSP430 Application Notes
      8. 4.8 TI E2E Community
      9. 4.9 Community at Large
    6. 5 FAQs
    7. 6 Schematics
  2.   Revision History

Emulated Storage Volume

mscProcessBuffer() is the first function to run after waking from LPM0. It checks the "operation" field of the RWbuf_info structure to see if the USB API is waiting for the application to handle any READ or WRITE buffer operations from the USB host.

If a READ or WRITE is pending, mscProcessBuffer accesses the media to perform the read or write. It does this by issuing low-level commands to the FatFs file system library, disk_read() and disk_write().

The block of code within mscProcessBuffer() for performing reads is:

while (RWbuf_info->operation == kUSBMSC_READ) { RWbuf_info->returnCode = disk_read(0, RWbuf_info->bufferAddr, RWbuf_info->lba, RWbuf_info->lbCount); // Fetch a block from the medium USBMSC_bufferProcessed(); // Close the buffer operation }

In a more typical mass storage application, the media would probably be an SD-card or external SPI flash. In this application, the media is located inside the MSP430 internal flash memory. This is only approximately 60KB, but it is big enough for what this demo needs, and saves the cost and complexity of external media.

FatFs is commonly used to interface with FAT-formatted memory cards, but for this example it is been customized for internal MSP430 flash. Most of this was done in disk_read() and disk_write().

Whereas the high-level FatFs calls ask FatFs to open or read files, and leave it to FatFs to parse the volume and locate the files itself, the low-level calls bypass this, asking FatFs to read/write specific locations in the volume. These locations are measured in blocks or sectors. The address of a block is called a logical block address, or LBA, which is a parameter passed to disk_read().

The demo application implements the volume as an array called storageVol[]. The C-code contents of storageVol[] contain the files that were seen in Step 3 of Section 1.3. storageVol[] occupies all of the F5529 upper on-chip flash memory, from address 0x10000 to the end of the map, 0x243FF. To ensure the linker does not place any code or other data there, a special linker segment has been set up: MYDRIVE. This segment is defined in the auxiliary linker file \USB_app\F5529LP_UE.cmd. storageVolume.c then contains code to locate storageVol[] there.

The volume within storageVol[] is formatted as FAT. It was generated using a procedure that is described in the comments in storageVol.c. You can use this same procedure to create your own storage volumes represented in C code, with your own file/directory sets.

If you are interested in using FatFs for SD cards, download the USB Developers Package and look in the USB examples for MSC interfaces. One of the examples is a USB SD-card reader, written to run on the F5529 Experimenter's Board (MSP-EXP430F5529) which has an SD-card socket on it. This example has a version of FatFs set up for this purpose.