Author |
Message |
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
У меня получилось получить некоторое подобие изображения
Как оказалось контроллер в дисплее S1D15G14. По крайней мере последовательность инициализации прокатила
Вот, пока белый экран:
Работает вроде по доке, потому что если врубить в настройках инверсию экран чернеет
Буду ковырять дальше
_________________ Всё что ты видишь - лживый облик.
|
28 Jul 2009 22:58 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
Разобрался, много интересного узнал.
щас пишу функции для работы с ним - так чтобы можно было поменять дисплеи местами (от нокии и от сименса например), но при этом не нужно было переписывать всё. Меняешь заголовочный файл и всё работает ))
Вот, так примерно выглядит красный цвет:
P.S. на электрониксе отписался, не устоял Именно там давным давно я пытался найти как инициализировать это дисплей
А теперь сам сделал - даж не верится
_________________ Всё что ты видишь - лживый облик.
|
30 Jul 2009 18:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22676 Location: Silicon Valley
|
А картинку вывести?
|
31 Jul 2009 14:15 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
Угу, скоро будет
Надо ещё кое с чем поэксперементировать
_________________ Всё что ты видишь - лживый облик.
|
31 Jul 2009 14:25 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
Написал вывод текста, чтоб использовать свой готовый шрифт
Только вот наткунлся на косяк - в режиме, который я юзаю для вывода текста оно разворачивает видеопамять на 90 градусов. получается 82 пикселя в строке, а не 101. (Щас вот думаю как можно избавиться от этого эффекта)
Пример текста:
З.Ы. Вывод изображений тоже будет, надо ещё работу с файлами человеческую сделать
_________________ Всё что ты видишь - лживый облик.
|
07 Aug 2009 14:44 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
кто нибудь сталкивался с такой странностью:
в нулевом секторе в partition record`е адрес boot сектора (DWORD, смещение от начала 1С6h) умножен на 512, тоесть например boot сектор находится в 16 секторе диска, а значение в поле 8192. Причём винда нормально читает и пишет эту флешку.
для примера первые сектора двух карточек (micro SD и micro SDHC)
http://www.nedopc.org/nedopc/upload/SD_dump.zip
_________________ Всё что ты видишь - лживый облик.
|
20 Oct 2009 09:56 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
По идее, элемент таблицы раздела должен быть таким:
А это значит, что число должно быть прямым номером сектора (на винтах я такое и наблюдаю обычно). Как это объяснить на флешках - хз... Вот: На винте все в порядке. Номер сектора. А вот флешка, 16Гб, один раздел (обычная USB):
Я вообще в непонятках. Кстати, я знаю, что флешку можно форматнуть без таблицы разделов - да, прямо бутсектор в логическом секторе 0. И винда видит оба формата: с таблицей разделов и без них. Я хз как это происходит. Может, винда сначала смотрит ID бутсектора, если находит - юзает, если не находит - пытается посмотреть таблицу разделов. Если она валидна - юзает, если нет - то не юзает и выдает ошибку.
|
21 Oct 2009 00:46 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
ну если MBR отсутствует, это нетрудно предусмотреть, а вот неправильный адрес бут сектора... наверное придётся сделать поиск нужного блока. типа если адрес неподошёл искать бут сектор по заранее известным значениям - сигнатуре AA55 и имени системы - FAT16 или FAT32.
ещё вариант - CHS адрес, но там вообще каша какая то получается...
_________________ Всё что ты видишь - лживый облик.
|
21 Oct 2009 03:47 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
что то в таком духе:
| | | | Code: FS_err=SD_init(); //Инициализация карты if (FS_err!=FS_READY) {return;}; //Возникла ошибка FS_err=SD_setBlockSize(0x200); //Размер блока 512 байт if (FS_err!=FS_READY) {return;}; //Возникла ошибка /* Читаю нулевой сектор диска. Из него добываю необходимую информацию */ FS_err=SD_read(0x00000000,ReadBuff); if (FS_err!=FS_READY) {return;}; if (FS_checkForBoot(ReadBuff)) {goto PBRread;}; //Если это не MBR... if (FS_checkSignature(ReadBuff)!=TRUE) {FS_err=FS_NTFMT; return;}; //это master boot record диска //Смещение от начала 0x1BE BootDescriptor=ReadBuff[446]; //boot indicator (80h = active partition) FirstPartSector=((unsigned long int)ReadBuff[449])<<8; FirstPartSector+=((unsigned long int)ReadBuff[448])<<8; FirstPartSector+=ReadBuff[447]; //Первый сектор раздела StartHead=ReadBuff[447]; StartSector=(ReadBuff[448]&0x3F); StartTrack=((((unsigned int)(ReadBuff[448]&0xC0))<<2)+ReadBuff[449]); FS_descriptor=ReadBuff[450]; //Описатель Файловой системы LastPartSector=((unsigned long int)ReadBuff[453])<<8; //Последний сектор раздела LastPartSector+=((unsigned long int)ReadBuff[452])<<8; LastPartSector+=ReadBuff[451];
HeadCount=ReadBuff[451]+1; SectorCount=(ReadBuff[452]&0x3F); TrackCount=((((unsigned int)(ReadBuff[452]&0xC0))<<2)+ReadBuff[453])+1; NumFirstSector=((unsigned long int)ReadBuff[457])<<8; //sectors preceding partition NumFirstSector+=((unsigned long int)ReadBuff[456])<<8; NumFirstSector+=((unsigned long int)ReadBuff[455])<<8; NumFirstSector+=ReadBuff[454]; NumSectOfPart=((unsigned long int)ReadBuff[461])<<8; //Количество секторов в разделе NumSectOfPart+=((unsigned long int)ReadBuff[460])<<8; NumSectOfPart+=((unsigned long int)ReadBuff[459])<<8; NumSectOfPart+=ReadBuff[458]; PBR=NumFirstSector*512; //По имеющимся данным вычисляем расположение первого сектора диска.
FS_err=SD_read(PBR, ReadBuff); if (FS_err!=FS_READY) {return;}; if (FS_checkSignature(ReadBuff)!=TRUE) //Если бут сектора по указаному адресу нет, пробуем найти { for (unsigned long int j=1;j<512;j++) //Ищем в первых 512 секторах { PBR=j*512; FS_err=SD_read(PBR, ReadBuff); if (FS_err!=FS_READY) {return;}; if (FS_checkForBoot(ReadBuff)) {goto PBRread;}; //Если нашли }; FS_err=FS_NTFMT; //или не нашли... return; }; PBRread: LCD_GotoXY(0,6); LCD_putstr("PBR at ",CP_DOS); LCD_putstr(ultoa(PBR,Digits,16),CP_DOS); LCD_putchar('h',CP_DOS); //Чтение Partition Boot Record | | | | |
получаем вот такое:
карточка на 1 гиг (mini SD):
на 2 гига (micro SD):
и на 4 гига (micro SDHC):
раздобыть бы ещё флешку <32 метров с FAT16 и что нибудь с FAT12
_________________ Всё что ты видишь - лживый облик.
|
21 Oct 2009 07:17 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Есть, но там ничего интересного. К тому же, ты можешь сделать раздел на ФАТ12 и на обычной флешке...
|
21 Oct 2009 20:02 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
интересно в плане "а как там по умолчанию", тоже могут быть какие нибуть неточности или неизвестности.
_________________ Всё что ты видишь - лживый облик.
|
22 Oct 2009 03:00 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Мелкие флешки форматируются в FAT16 (16МБ которые). Думаю, просто разрабы не хотят делать поддержку почти умершего FAT12, да и по ограничению 16МБ это лимит для FAT12 ЕМНИП.
|
22 Oct 2009 19:58 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
про FAT12 я бы даж не задумывался, если бы у меня не было флешки на 64мб... с FAT12 - шла в комплекте с к750 правда она совсем не SD. Но вот, именно то что она 64мб и FAT12 меня заинтересовало.
Винда в свойствах не хочет показывать тип FAT... пришлось извратиться:
_________________ Всё что ты видишь - лживый облик.
|
23 Oct 2009 06:38 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Все делается намного проще (кликабельно):
|
23 Oct 2009 07:56 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
удобно, однако
_________________ Всё что ты видишь - лживый облик.
|
23 Oct 2009 08:26 |
|
|