On 05/13/14 12:15, Andrey Mozzhuhin wrote:
Do you not forget to call rtems_blkdev_request_done in read routine of
block device driver?
Also try to increase CONFIGURE_MAXIMUM_TASKS - bdbuf need some worker
tasks.
I call rtems_blkdev_request_done after each read request, and changing
CONFIGURE_MAXIMUM_TASKS to 20 (instead of 2) did not had any impact.
>> https://github.com/jncronin/rpi-boot/blob/master/emmc.c
Hmm. Implementation specific to Raspberry Pi is not good idea. It is
better to separate MMC/SD protocol implementation and hardware support
like in FreeBSD or Linux.
Yes, the point in the end is probably to have the MMC/SD protocol
somewhere else, just like the spi-sd-card driver (SD card access through
SPI interface protocol, at c/src/libchip/i2c/spi-sd-card*).
>> Not sure how to approach this problem, as the logic seems right.
Will do more testing in the meanwhile.
Today I have re-formated the card (under Linux), and the block data read
on RPi checks with the card hexdump on Linux.
So far I tested:
- The block data that is being read, and compared with the same block
data read on Linux (small mismatch (4 bits) at the middle of a 512 byte
block before, no mismatch now)
- The request buffer contents
(http://www.rtems.org/onlinedocs/doxygen/cpukit/html/structrtems__blkdev__sg__buffer.html).
Looking at this I don't know what the User pointer is. I'm using the
buffer pointer to store my readings.
- Reading the partition table from the first block. I can read the first
block and register the card partition as a logical disk, so reading and
registering the partition table is no problem.
- Tried also a busy wait between block readings.
The result is always the same: when mounting the card partition, it
reads the first two partition blocks and then hangs.
If you get stuck share your sources and let me know.
Will try to get the code to github soon.
2014-05-13 14:03 GMT+04:00 Andre Marques
<andre.lousa.marq...@gmail.com <mailto:andre.lousa.marq...@gmail.com>>:
On 05/12/14 19:25, Andrey Mozzhuhin wrote:
I think you need start with simple tests without file systems and
block device driver.
Try read and write blocks with known patterns and check it on PC
and Raspberry Pi.
I have checked the data read by my emmc driver from the first two
blocks (the ones it reads) on the RPi, and compared with an
hexdump of those same two blocks on Linux, and there is a small
mismatch at the middle of the first block.
Not sure how to approach this problem, as the logic seems right.
Will do more testing in the meanwhile.
What are you use for MMC/SD protocol? Can I see it and block
device driver somewhere?
I'm porting the following code
https://github.com/jncronin/rpi-boot/blob/master/emmc.c
and using the following SD card documentation
Physical Layer Simplified Specification (3.01) -
https://www.sdcard.org/downloads/pls/simplified_specs/archive/part1_301.pdf
Host Controller Simplified Specification (2.00) -
https://www.sdcard.org/downloads/pls/simplified_specs/archive/partA2_200.pdf
and the raspberry soc datasheet: Broadcom BCM2835 Peripherals
Guide (Chapter 5 - EMMC)
2014-05-12 20:23 GMT+04:00 Andre Marques
<andre.lousa.marq...@gmail.com
<mailto:andre.lousa.marq...@gmail.com>>:
Hello,
I have used the pc386 BSP to mount the card (before your
suggestions) using the fileio sample and it could read the
card contents perfectly.
Then I filled the card with zeros using dd on Linux, modified
the fileio sample to format the card with msdos_format(dev,
NULL) and then mounted it on the pc 386 BSP fileio sample and
I could write and read the card.
On Linux I set the card with the necessary files for
Raspberry, and when my driver tries to mount the card on the
Raspberry Pi it reads the first 2 blocks (now 0 and 1,
because the card has no partition table) and hangs, just as
before.
I guess my driver is having some reading problems.
On 05/05/14 19:30, Andrey Mozzhuhin wrote:
You can try to use SD Card in opposite direction:
0) fill SD Card with zeroes;
1) format partition under RTEMS with msdos_format() function;
2) check that PC can read/write this SD Card;
3) if PC fails to mount this partition - dump SD Card and
check that all data is on right sectors.
2014-05-05 22:28 GMT+04:00 Andrey Mozzhuhin
<nops...@gmail.com <mailto:nops...@gmail.com>>:
Hi, Andre
You can try to use SD Card in opposite direction:
0) fill SD Card with zeroes;
1) format partition under RTEMS with msdos_format()
function;
2) check that PC can read/write this SD Card;
3) if PC fails to mount this partition - dump SD Card
and check that all data is on right sectors.
2014-05-05 13:52 GMT+04:00 Andre Marques
<andre.lousa.marq...@gmail.com
<mailto:andre.lousa.marq...@gmail.com>>:
Hello,
Following the problem in
http://www.rtems.org/pipermail/rtems-devel/2014-April/006585.html
I am now trying to mount the SD card partitions on
RTEMS.
Summarizing the process:
1. rtems_io_register_driver (by calling my driver
with CONFIGURE_APPLICATION_EXTRA_DRIVERS on hello
sample)
2. rtems_filesystem_make_dev_t (to get the device file)
3. rtems_disk_io_initialize
4. rtems_disk_create_phys (to create the disk, at
/dev/sdc0)
5. rtems_bdpart_register_from_disk (to read and
register the partitions)
6. rtems_fsmount (to mount the partitions)
For rtems_fsmount I am providing the following fs_table:
rtems_fstab_entry fs_table [] = {
{
.source = "/dev/sdc0",
.target = "/mnt/p1",
.type = "dosfs",
.options = RTEMS_FILESYSTEM_READ_WRITE,
.report_reasons = RTEMS_FSTAB_ANY,
.abort_reasons = RTEMS_FSTAB_OK
},{
.source = "/dev/sdc01",
.target = "/mnt/p2",
.type = "dosfs",
.options = RTEMS_FILESYSTEM_READ_WRITE,
.report_reasons = RTEMS_FSTAB_ANY,
.abort_reasons = RTEMS_FSTAB_NONE
}
};
The SD card has only one partition starting at block
number 8192.
After I call rtems_fsmount it calls my driver to
read block 8192 and 8193 and then hangs.
I have tested the driver and It seems to have no
problem reading single or multiple blocks.
Any tips?
Also I am using the following confdefs configuration
(some values are exaggerated):
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
#define CONFIGURE_FILESYSTEM_DOSFS
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS
SD_CARD_DRIVER_TABLE_ENTRY
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_DRIVERS 10
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024)
#define CONFIGURE_INITIAL_EXTENSIONS
RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_INIT
--André Marques
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org <mailto:rtems-devel@rtems.org>
http://www.rtems.org/mailman/listinfo/rtems-devel
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org <mailto:rtems-devel@rtems.org>
http://www.rtems.org/mailman/listinfo/rtems-devel
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel