Сб апр 25, 2020 11:04:14
da-nie писал(а):А uint8_t a=GetByte(1); что выдаёт?
da-nie писал(а):bool SD_ReadBlock(uint32_t BlockAddr,uint8_t *Addr)
Сб апр 25, 2020 11:06:43
Тут указатель на Addr. В исходнике его нет. Если добавлять, то где еще код править надо?
Сб апр 25, 2020 11:24:07
char str[16];
uint8_t b=GetByte(510);
uint8_t c=GetByte(511);
for (uint16_t addr1=0; addr1<512; addr1++)
{
uint8_t a=GetByte(addr1);
sprintf(str,"%3d: %x %x %x",addr1,a,b,c);
WH1602_SetTextDownLine(str);
_delay_ms(250);
}
_delay_ms(10000);
Сб апр 25, 2020 11:31:25
По циклу где-то на 440 (dec) начинает выдавать значения отличные от 0.
Сб апр 25, 2020 12:05:42
da-nie писал(а): попробуйте конденсатор по питанию у карты убрать.
Сб апр 25, 2020 13:14:24
Честно? Два раза перечитал и не смог понять, как это может быть?
Во, вторых, конденсатор стоит после стабилизатора и там нет в цепи никакого сопротивления, чтобы появилась какая-та задержка по нарастанию напряжения.
До выпайки конденсатора пробовал подключить карту 256 МБ просто для проверки... Так вот, по 0 адресу читает правильно.
Но после подачи питания и отображения памяти карты в течении 20 минут больше эмулятор так ничего и не отразил.
Вс апр 26, 2020 22:41:31
da-nie писал(а):А по остальным адресам? 0x55 и 0xAA там есть?
da-nie писал(а):А попробуйте понизить частоту контроллера до 1 МГЦ
Пн апр 27, 2020 00:05:43
Пн апр 27, 2020 10:56:30
Пн апр 27, 2020 20:29:29
Эти адреса считываются без проблем на обеих картах. А вот начальные по 00 почему-то. Я не верю, что обе карты оказались уж какими-то "оригинальными"
Ну и еще раз переспрошу, почему прошивка дробит файл tap на несколько? Заголовок - это один файл, данные - это другой файл в понятии устройства. И между собой эти куски не связаны. Причем после воспроизведения заголовка зависает намертво.
почему у всех, кто собирал результат нормальный, а у меня две карты глючат?
Опять же не верю, что это из-за того, что я заменил диоды на микросхему 4050.
Но две мои карты на 32 и 256 МБ с этим устройством не работают.
Я не могу добиться ни ка каких примерах нормальную работу CMD17 чтение блока
даю запрос CMD17,0,0xFF -> 0x00 (вроде как гуд)
жду 0хFE и дожидаюсь
начинаю читать страничку - фигу, тока 0x00 идет и все.
Когда я запускаю cmd17 с адресом (0x00000000) для моей карты из PIC-18F4520 на шине SPI, я получаю правильный токен R1 возврата из командной строки. Затем, после проверки нескольких циклов, я получаю маркер 0xFE, возвращаемый из моего выдающегося SPI_Put_Char (0xFF). Затем должны начаться данные, чтобы я прочитал 512 байт в мой массив IO_Buffer. Когда я сканирую результаты, я получил много байтов 0x00. Как ни странно, и часто, примерно в позиции 448 в секторе 0, появляются некоторые данные - несколько байтов тут и там - тогда последние 32 байта (я могу видеть только 32 на моем ЖК-экране одновременно) - все нули, за которыми следует маркер 0x55AA ожидается в конце загрузочного сектора.
google translator
Наконец-то нашел решение этой проблемы!
Оказывается, вы читали MBR, который находится по адресу 0 на SD-карте. Чтобы найти местоположение загрузочного сектора, нужно прочитать соответствующую запись в MBR. Записи начинаются с адреса 0x01be и по 16 байт каждая. Интересующий элемент в записи находится по смещению 0x08, имеет длину 4 байта и называется LBA. [Википедия] Чтобы получить адрес местоположения загрузочного сектора, нужно умножить LBA на размер сектора (512 байт). [Форум по микрочипам]
Пн апр 27, 2020 22:30:01
da-nie писал(а):CD4050BE
Пн апр 27, 2020 23:19:08
разве, что показались, слишком большие паузы между блоками.
После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно.
Вт апр 28, 2020 00:30:41
da-nie писал(а):Это со всеми tap?
da-nie писал(а):А контроллер не с aliexpress у вас?
Вт апр 28, 2020 09:34:37
Может она поможет разобраться?
Вт апр 28, 2020 11:29:03
da-nie писал(а):Я поменял только файл fat.c.
da-nie писал(а):P.S. Если же вам FAT интересен,
Вт апр 28, 2020 11:42:02
FATType=FAT12;
if (CountofClusters<4085UL)
{
WH1602_SetTextProgmemDownLine(Text_FAT12);
while(1);
}
else
{
if (CountofClusters<65525UL)
{
WH1602_SetTextProgmemDownLine(Text_FAT16);
_delay_ms(2000);
FATType=FAT16;
}
else
{
WH1602_SetTextProgmemDownLine(Text_FAT32);
FATType=FAT32;
while(1);
}
}
Вт апр 28, 2020 12:48:54
da-nie писал(а):size_t partition=0; От 0 до 3.
da-nie писал(а):У вас там, случайно, нет расширенных разделов?
da-nie писал(а):Вот такой модуль правильный.
FATOffset=*((uint32_t*)offset);
serg_svd писал(а):После прочтения последнего блока и некоторой паузы железка начала читать какой-то другой раздел карты самостоятельно
Вт апр 28, 2020 13:33:18
Я не знаю как это определить.
С этим модулем и пробовал.
Кстати, компилятор выдает предупреждение
Вт апр 28, 2020 16:58:22
Вт апр 28, 2020 17:19:13
Теперь пишет "Найден MBR" "FAT не найдена" на карте 32 МБ.
С картой 256 МБ вроде работает, но видит некую папку "YTM o", которой нет ни в скрытых, ни в системных.
На карте 1 ГБ есть тоже такая же непонятная папка, но с именем "LS"