Hi,
using MQX4.0.2 on K60FX512, I want to create small ramdisk, but always get error MFS_WRITE_FAULT during format, what is wrong?
extern unsigned char extBuffer[4096];
MQX_FILE_PTR a_fd_ptr;
void Ram_disk_start(void)
{
MQX_FILE_PTR dev_handle1,fp;
int_32 error_code;
_mqx_uint mqx_status;
a_fd_ptr = 0;
mqx_status = _io_mem_install("mfs_ramdisk:", (uchar_ptr)&extBuffer[0], (_file_size)4096);
dev_handle1 = fopen("mfs_ramdisk:", "b");
mqx_status = _io_mfs_install(dev_handle1, "b:", 0);
a_fd_ptr = fopen("b:", NULL);
error_code = ferror(a_fd_ptr);
if ( error_code == MFS_NOT_A_DOS_DISK ) {
printf("\nNOT A DOS DISK! You must format to continue.");
rdformat();
}
}
void rdformat(void)
{
int_32 error_code = IO_ERROR;
uint_32 bad_cluster_count;
MFS_IOCTL_FORMAT_PARAM format_struct;
MFS_FORMAT_DATA MFS_format =
{
/* PHYSICAL_DRIVE; */ 0x80,
/* MEDIA_DESCRIPTOR; */ 0xf8,
/* BYTES_PER_SECTOR; */ 256,
/* SECTORS_PER_TRACK; */ 0,
/* NUMBER_OF_HEADS; */ 0,
/* NUMBER_OF_SECTORS; */ 16, /* depends on disk */
/* HIDDEN_SECTORS; */ 0,
/* RESERVED_SECTORS; */ 0
};
format_struct.FORMAT_PTR = &MFS_format;
format_struct.COUNT_PTR = &bad_cluster_count;
error_code = ioctl(a_fd_ptr, IO_IOCTL_FORMAT, (uint_32_ptr) &format_struct);
if (error_code) {
printf("Error while formatting: 0x%x\n", error_code);
}
}
已解决! 转到解答。
Hi Kristie,
C:\Freescale\Freescale_MQX_4_1_1_GA\mfs\examples\ramdisk
Terminal output:
Demo start
Initialized Ram Disk to a:\
NOT A DOS DISK! You must format to continue.
Shell (build: Apr 30 2015)
Copyright (c) 2013 Freescale Semiconductor;
shell>
shell> format a:
Free disk space: 1536 bytes
shell>
shell> write test 1234
shell>
shell> dir
TEST 1234 01-01-1980 00:00:18 A TEST
shell>
shell> type test
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQ
shell>
shell>
I used MQX4.1.1 on TWR-K70F120M using CW10.6.
Now your code is trying to implement MFS on 4096 bytes. This is too small (just barely).
MFS needs RAM for the FAT table. My example has the RAM disk at 6144 (0x1800) bytes and after formatting you can see there is only 1536 bytes available.
When I set my example to 4096 byte I get the following output:
Demo start
Initialized Ram Disk to a:\
NOT A DOS DISK! You must format to continue.
Shell (build: Apr 30 2015)
Copyright (c) 2013 Freescale Semiconductor;
shell>
shell> format a:
Error while formatting: 0x3057
shell>
shell>
Please increase your RAM disk size.
Regards,
David
Hi Kristie,
C:\Freescale\Freescale_MQX_4_1_1_GA\mfs\examples\ramdisk
Terminal output:
Demo start
Initialized Ram Disk to a:\
NOT A DOS DISK! You must format to continue.
Shell (build: Apr 30 2015)
Copyright (c) 2013 Freescale Semiconductor;
shell>
shell> format a:
Free disk space: 1536 bytes
shell>
shell> write test 1234
shell>
shell> dir
TEST 1234 01-01-1980 00:00:18 A TEST
shell>
shell> type test
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz0123456789:;<=>?@ABCDEFGHIJKLMNOPQ
shell>
shell>
I used MQX4.1.1 on TWR-K70F120M using CW10.6.
Now your code is trying to implement MFS on 4096 bytes. This is too small (just barely).
MFS needs RAM for the FAT table. My example has the RAM disk at 6144 (0x1800) bytes and after formatting you can see there is only 1536 bytes available.
When I set my example to 4096 byte I get the following output:
Demo start
Initialized Ram Disk to a:\
NOT A DOS DISK! You must format to continue.
Shell (build: Apr 30 2015)
Copyright (c) 2013 Freescale Semiconductor;
shell>
shell> format a:
Error while formatting: 0x3057
shell>
shell>
Please increase your RAM disk size.
Regards,
David