diff -ur 1.2.3-orig/common/cyfxtx.c 1.2.3/common/cyfxtx.c
--- 1.2.3-orig/common/cyfxtx.c	2013-02-07 17:16:54.000000000 -0800
+++ 1.2.3/common/cyfxtx.c	2014-03-25 16:56:12.484602382 -0700
@@ -33,7 +33,7 @@
    such as thread stacks and memory for message queues. The Cypress FX3
    libraries require a Mem heap size of at least 32 KB.
  */
-#define CY_U3P_MEM_HEAP_BASE         ((uint8_t *)0x40038000)
+#define CY_U3P_MEM_HEAP_BASE         ((uint8_t *)0x40044000)
 #define CY_U3P_MEM_HEAP_SIZE         (0x8000)
 
 /* The last 32 KB of RAM is reserved for 2-stage boot operation. This value can be changed to
diff -ur 1.2.3-orig/common/fx3.ld 1.2.3/common/fx3.ld
--- 1.2.3-orig/common/fx3.ld	2013-02-07 17:16:54.000000000 -0800
+++ 1.2.3/common/fx3.ld	2014-03-25 16:59:40.872240377 -0700
@@ -26,10 +26,11 @@
    The default memory map used for FX3 applications is as follows:
 
    Descriptor area Base: 0x40000000 Size: 12KB
-   Code area       Base: 0x40003000 Size: 180KB
-   Data area       Base: 0x40030000 Size: 32KB
-   Driver heap     Base: 0x40038000 Size: 32KB  (Update cyfxtx.c to change this.)
-   Buffer area     Base: 0x40040000 Size: 256KB (Update cyfxtx.c to change this.)
+   Code area       Base: 0x40003000 Size: 212KB
+   Data area       Base: 0x40038000 Size: 32KB
+   Heap            Base: 0x40040000 Size: 16KB
+   Driver heap     Base: 0x40044000 Size: 32KB  (Update cyfxtx.c to change this.)
+   Buffer area     Base: 0x4004C000 Size: 208KB (Update cyfxtx.c to change this.)
 
    Interrupt handlers to be placed in I-TCM (16KB).
    The first 256 bytes of ITCM are reserved for Exception Vectors.
@@ -52,8 +53,8 @@
 MEMORY
 {
 	I-TCM		: ORIGIN = 0x100,	LENGTH = 0x3F00
-	SYS_MEM		: ORIGIN = 0x40003000	LENGTH = 0x2D000
-	DATA		: ORIGIN = 0x40030000	LENGTH = 0x8000
+	SYS_MEM		: ORIGIN = 0x40003000	LENGTH = 0x35000
+	DATA		: ORIGIN = 0x40038000	LENGTH = 0x8000
 }
 
 SECTIONS
@@ -75,7 +76,7 @@
 		 _etext = .;
 	} > SYS_MEM
 
-	. = 0x40030000;
+	. = 0x40038000;
 	.data :
 	{
 		_data = .;
@@ -104,5 +105,16 @@
 	} > DATA
 	__exidx_end = .;
 
+	PROVIDE(__exidx_end = __exidx_end);
+	
+	. = ALIGN(4);
+	__heap_start = 0x40040000;
+	PROVIDE(__heap_start = __heap_start);
+	
+	. = ALIGN(4);
+	__heap_end = 0x40044000;
+	PROVIDE(__heap_end = __heap_end);
+	
+	PROVIDE(__heap_size = __heap_end - __heap_start);
 }