<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic MFS Non-contigous write in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MFS-Non-contigous-write/m-p/204871#M4781</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MQX 3.6.2﻿&lt;/P&gt;&lt;P&gt;Tower MCF52259&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am still trying to use the files from an SPI FLASH for the web server.&amp;nbsp; Some of this works but my problem lies in the whole file not being sent to the browser.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is not any problem with the webserver since I tried to open and print the file outside of the webserver context and it does the same thing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can read and write the flash perfectly with low level read and writes but once I install MFS on top and try to write and read files I see the problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have added print statements in my low level read and write routines to tell me what page is being written or read.&lt;/P&gt;&lt;P&gt;I have setup MFS as a block device with a 1024 block size which is the page size of my flash.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I expect to wrtie and read full pages at a time, and as such the write routine erase the page before it writes it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I install MFS this way&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = _io_mfs_install(webflsh_handle, filesystem_name, (_file_size)0);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;I open the file system this way:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filesystem_handle = fopen(filesystem_name, 0);&lt;BR /&gt;﻿&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = ferror (filesystem_handle);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (error_code == MFS_NOT_A_DOS_DISK) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("\nTrying to format");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.BYTES_PER_SECTOR = 1024;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.NUMBER_OF_SECTORS = 8000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.HIDDEN_SECTORS = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.RESERVED_SECTORS = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;error_code = _io_ioctl(filesystem_handle, IO_IOCTL_FORMAT_TEST, &amp;amp;format_param_ptr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (error_code != MFS_NO_ERROR)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error formatting MFS: %s\n", MFS_Error_text((uint_32)error_code));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;This is the printout during format&lt;/P&gt;&lt;P&gt;Rea 0&lt;BR /&gt;Rea 0&lt;BR /&gt;NOT A DOS DISK! You must format to continue.&lt;BR /&gt;&lt;BR /&gt;Trying to format&lt;BR /&gt;Wri 1&lt;BR /&gt;Wri 2&lt;BR /&gt;Wri 3&lt;BR /&gt;Wri 4&lt;BR /&gt;Wri 5&lt;BR /&gt;Wri 6&lt;BR /&gt;Wri 7&lt;BR /&gt;Wri 8&lt;BR /&gt;Wri 9&lt;BR /&gt;Wri 10&lt;BR /&gt;Wri 11&lt;BR /&gt;Wri 12&lt;BR /&gt;Wri 13&lt;BR /&gt;Wri 14&lt;BR /&gt;Wri 15&lt;BR /&gt;Wri 16&lt;BR /&gt;Wri 17&lt;BR /&gt;Wri 18&lt;BR /&gt;Wri 19&lt;BR /&gt;Wri 20&lt;BR /&gt;Wri 21&lt;BR /&gt;Wri 22&lt;BR /&gt;Wri 23&lt;BR /&gt;Wri 24&lt;BR /&gt;Wri 25&lt;BR /&gt;Wri 26&lt;BR /&gt;Wri 27&lt;BR /&gt;Wri 28&lt;BR /&gt;Wri 29&lt;BR /&gt;Wri 30&lt;BR /&gt;Wri 31&lt;BR /&gt;Wri 32&lt;BR /&gt;Wri 33&lt;BR /&gt;Wri 34&lt;BR /&gt;Wri 35&lt;BR /&gt;Wri 36&lt;BR /&gt;Wri 37&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 0&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Which looks good to me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then I check some parameters on the disk&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 2&lt;BR /&gt;Rea 3&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 5&lt;BR /&gt;0 Bad Clusters&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 2&lt;BR /&gt;Rea 3&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 5&lt;BR /&gt;Free Space is 1222656&lt;BR /&gt;The current directory is: \&lt;BR /&gt;Cluster Size is 2048&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I am ready to copy&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My last try was to change the cache mode to off&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_GET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nCache Mode=%d",mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode = MFS_WRITE_THROUGH_CACHE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_SET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_GET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nCache Mode=%d",mode);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;﻿Now time to open the files and copy&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("Copying %s\n", copy_name1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_fd = fopen(copy_name1, "r");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (in_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open source file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_fd = fopen(copy_to1, "w");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (out_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open destination file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = NULL;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = _mem_alloc(COPY_BLOCK_SIZE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf_fil = (char *)buffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (buffer == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to alloc memory\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copysize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copybuffer= buffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size = read(in_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (size &amp;gt; 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(size &amp;lt; COPY_BLOCK_SIZE){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(size &amp;lt; COPY_BLOCK_SIZE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buf_fil[size++] = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("\n%s",copybuffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsize = write(out_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while (wsize == size);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Here is the log for the copy&lt;/P&gt;&lt;P&gt;Cache Mode=2&lt;BR /&gt;Cache Mode=0&lt;BR /&gt;Copying&lt;BR /&gt;&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 52&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 53&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 56&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 57&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 64&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 65&lt;BR /&gt;﻿NOTICE HOW THE PAGES ARE NOT CONTIGOUS.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Close the files&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (buffer) _mem_free(buffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (in_fd) fclose(in_fd);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (out_fd) fclose(out_fd);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;'Now re-open and try to read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;printf ("reading %s\n", copy_name1);&lt;BR /&gt;&amp;nbsp;in_fd = fopen(copy_to1, "r");&lt;BR /&gt;&amp;nbsp;if (in_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open source file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;buffer = NULL;&lt;BR /&gt;&amp;nbsp;buffer = _mem_alloc(COPY_BLOCK_SIZE);&lt;BR /&gt;&amp;nbsp;if (buffer == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to alloc memory\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;wsize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;copysize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;copybuffer= buffer;&lt;BR /&gt;&amp;nbsp;do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; size = read(in_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (size &amp;gt; 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n%s",copybuffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp;} while (size);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;The printout for the read is:&lt;/P&gt;&lt;P&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rea 52&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rea 53&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Notice how the read stops after the first discontinuity from the wrtie, to be specific&lt;/P&gt;&lt;P&gt;pages written were 52, 53, 56, 57, 64, 65&amp;nbsp; pages read were 52, 53 and then it stops.&lt;/P&gt;&lt;P&gt;after reading page 53 the next read returns "0".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any ideas anyone?&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 11 May 2011 03:46:47 GMT</pubDate>
    <dc:creator>JKadin</dc:creator>
    <dc:date>2011-05-11T03:46:47Z</dc:date>
    <item>
      <title>MFS Non-contigous write</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MFS-Non-contigous-write/m-p/204871#M4781</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MQX 3.6.2﻿&lt;/P&gt;&lt;P&gt;Tower MCF52259&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am still trying to use the files from an SPI FLASH for the web server.&amp;nbsp; Some of this works but my problem lies in the whole file not being sent to the browser.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It is not any problem with the webserver since I tried to open and print the file outside of the webserver context and it does the same thing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I can read and write the flash perfectly with low level read and writes but once I install MFS on top and try to write and read files I see the problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have added print statements in my low level read and write routines to tell me what page is being written or read.&lt;/P&gt;&lt;P&gt;I have setup MFS as a block device with a 1024 block size which is the page size of my flash.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I expect to wrtie and read full pages at a time, and as such the write routine erase the page before it writes it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I install MFS this way&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = _io_mfs_install(webflsh_handle, filesystem_name, (_file_size)0);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;I open the file system this way:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filesystem_handle = fopen(filesystem_name, 0);&lt;BR /&gt;﻿&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = ferror (filesystem_handle);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (error_code == MFS_NOT_A_DOS_DISK) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf("\nTrying to format");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.BYTES_PER_SECTOR = 1024;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.NUMBER_OF_SECTORS = 8000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.HIDDEN_SECTORS = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;format_data.RESERVED_SECTORS = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;error_code = _io_ioctl(filesystem_handle, IO_IOCTL_FORMAT_TEST, &amp;amp;format_param_ptr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (error_code != MFS_NO_ERROR)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error formatting MFS: %s\n", MFS_Error_text((uint_32)error_code));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;This is the printout during format&lt;/P&gt;&lt;P&gt;Rea 0&lt;BR /&gt;Rea 0&lt;BR /&gt;NOT A DOS DISK! You must format to continue.&lt;BR /&gt;&lt;BR /&gt;Trying to format&lt;BR /&gt;Wri 1&lt;BR /&gt;Wri 2&lt;BR /&gt;Wri 3&lt;BR /&gt;Wri 4&lt;BR /&gt;Wri 5&lt;BR /&gt;Wri 6&lt;BR /&gt;Wri 7&lt;BR /&gt;Wri 8&lt;BR /&gt;Wri 9&lt;BR /&gt;Wri 10&lt;BR /&gt;Wri 11&lt;BR /&gt;Wri 12&lt;BR /&gt;Wri 13&lt;BR /&gt;Wri 14&lt;BR /&gt;Wri 15&lt;BR /&gt;Wri 16&lt;BR /&gt;Wri 17&lt;BR /&gt;Wri 18&lt;BR /&gt;Wri 19&lt;BR /&gt;Wri 20&lt;BR /&gt;Wri 21&lt;BR /&gt;Wri 22&lt;BR /&gt;Wri 23&lt;BR /&gt;Wri 24&lt;BR /&gt;Wri 25&lt;BR /&gt;Wri 26&lt;BR /&gt;Wri 27&lt;BR /&gt;Wri 28&lt;BR /&gt;Wri 29&lt;BR /&gt;Wri 30&lt;BR /&gt;Wri 31&lt;BR /&gt;Wri 32&lt;BR /&gt;Wri 33&lt;BR /&gt;Wri 34&lt;BR /&gt;Wri 35&lt;BR /&gt;Wri 36&lt;BR /&gt;Wri 37&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 0&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Which looks good to me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then I check some parameters on the disk&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 2&lt;BR /&gt;Rea 3&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 5&lt;BR /&gt;0 Bad Clusters&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 1&lt;BR /&gt;Rea 2&lt;BR /&gt;Rea 3&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 4&lt;BR /&gt;Rea 5&lt;BR /&gt;Free Space is 1222656&lt;BR /&gt;The current directory is: \&lt;BR /&gt;Cluster Size is 2048&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I am ready to copy&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My last try was to change the cache mode to off&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_GET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nCache Mode=%d",mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode = MFS_WRITE_THROUGH_CACHE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_SET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(filesystem_handle,IO_IOCTL_GET_FAT_CACHE_MODE,&amp;amp;mode);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nCache Mode=%d",mode);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;﻿Now time to open the files and copy&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("Copying %s\n", copy_name1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_fd = fopen(copy_name1, "r");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (in_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open source file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_fd = fopen(copy_to1, "w");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (out_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open destination file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = NULL;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer = _mem_alloc(COPY_BLOCK_SIZE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf_fil = (char *)buffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (buffer == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to alloc memory\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copysize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; copybuffer= buffer;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size = read(in_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (size &amp;gt; 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(size &amp;lt; COPY_BLOCK_SIZE){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(size &amp;lt; COPY_BLOCK_SIZE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buf_fil[size++] = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("\n%s",copybuffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wsize = write(out_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while (wsize == size);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Here is the log for the copy&lt;/P&gt;&lt;P&gt;Cache Mode=2&lt;BR /&gt;Cache Mode=0&lt;BR /&gt;Copying&lt;BR /&gt;&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 52&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 53&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 56&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 57&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 64&lt;BR /&gt;Wri 0&lt;BR /&gt;Wri 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wri 65&lt;BR /&gt;﻿NOTICE HOW THE PAGES ARE NOT CONTIGOUS.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Close the files&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (buffer) _mem_free(buffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (in_fd) fclose(in_fd);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (out_fd) fclose(out_fd);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;'Now re-open and try to read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;printf ("reading %s\n", copy_name1);&lt;BR /&gt;&amp;nbsp;in_fd = fopen(copy_to1, "r");&lt;BR /&gt;&amp;nbsp;if (in_fd == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to open source file\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;buffer = NULL;&lt;BR /&gt;&amp;nbsp;buffer = _mem_alloc(COPY_BLOCK_SIZE);&lt;BR /&gt;&amp;nbsp;if (buffer == NULL)&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error, unable to alloc memory\n" );&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;wsize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;copysize = COPY_BLOCK_SIZE;&lt;BR /&gt;&amp;nbsp;copybuffer= buffer;&lt;BR /&gt;&amp;nbsp;do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; size = read(in_fd, copybuffer, copysize);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (size &amp;gt; 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n%s",copybuffer);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR /&gt;&amp;nbsp;} while (size);&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;The printout for the read is:&lt;/P&gt;&lt;P&gt;Rea 6&lt;BR /&gt;Rea 7&lt;BR /&gt;Rea 8&lt;BR /&gt;Rea 9&lt;BR /&gt;Rea 10&lt;BR /&gt;Rea 11&lt;BR /&gt;Rea 12&lt;BR /&gt;Rea 13&lt;BR /&gt;Rea 14&lt;BR /&gt;Rea 15&lt;BR /&gt;Rea 16&lt;BR /&gt;Rea 17&lt;BR /&gt;Rea 18&lt;BR /&gt;Rea 19&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rea 52&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rea 53&lt;BR /&gt;Rea 0&lt;BR /&gt;Rea 1&lt;BR /&gt;﻿&lt;/P&gt;&lt;P&gt;Notice how the read stops after the first discontinuity from the wrtie, to be specific&lt;/P&gt;&lt;P&gt;pages written were 52, 53, 56, 57, 64, 65&amp;nbsp; pages read were 52, 53 and then it stops.&lt;/P&gt;&lt;P&gt;after reading page 53 the next read returns "0".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any ideas anyone?&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 May 2011 03:46:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MFS-Non-contigous-write/m-p/204871#M4781</guid>
      <dc:creator>JKadin</dc:creator>
      <dc:date>2011-05-11T03:46:47Z</dc:date>
    </item>
    <item>
      <title>Re: MFS Non-contigous write</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MFS-Non-contigous-write/m-p/204872#M4782</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;try to flush caches and out_fd before reopening the file again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PetrM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 May 2011 20:24:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MFS-Non-contigous-write/m-p/204872#M4782</guid>
      <dc:creator>PetrM</dc:creator>
      <dc:date>2011-05-18T20:24:41Z</dc:date>
    </item>
  </channel>
</rss>

