AVR+VS1002=mp3

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

У меня получилось получить некоторое подобие изображения :D :D :D
Как оказалось контроллер в дисплее S1D15G14. По крайней мере последовательность инициализации прокатила 8)
Вот, пока белый экран:
Image
Работает вроде по доке, потому что если врубить в настройках инверсию экран чернеет :wink:
Буду ковырять дальше
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Разобрался, много интересного узнал.
щас пишу функции для работы с ним - так чтобы можно было поменять дисплеи местами (от нокии и от сименса например), но при этом не нужно было переписывать всё. Меняешь заголовочный файл и всё работает ))
Вот, так примерно выглядит красный цвет:
Image

P.S. на электрониксе отписался, не устоял :lol: Именно там давным давно я пытался найти как инициализировать это дисплей :rotate:
А теперь сам сделал - даж не верится :wink:
Всё что ты видишь - лживый облик.
User avatar
Shaos
Admin
Posts: 24049
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А картинку вывести? ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Угу, скоро будет 8)
Надо ещё кое с чем поэксперементировать :D
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Написал вывод текста, чтоб использовать свой готовый шрифт :kruto:
Только вот наткунлся на косяк - в режиме, который я юзаю для вывода текста оно разворачивает видеопамять на 90 градусов. получается 82 пикселя в строке, а не 101. (Щас вот думаю как можно избавиться от этого эффекта)
Пример текста:
Image

З.Ы. Вывод изображений тоже будет, надо ещё работу с файлами человеческую сделать :P
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

кто нибудь сталкивался с такой странностью:
в нулевом секторе в partition record`е адрес boot сектора (DWORD, смещение от начала 1С6h) умножен на 512, тоесть например boot сектор находится в 16 секторе диска, а значение в поле 8192. Причём винда нормально читает и пишет эту флешку.
для примера первые сектора двух карточек (micro SD и micro SDHC)
http://www.nedopc.org/nedopc/upload/SD_dump.zip
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

По идее, элемент таблицы раздела должен быть таким:

Code: Select all

+00h - byte признак активности раздела (80h - активен)
+01h - byte номер поверхности начала раздела
+02h - word номер цилиндра и сектора начала раздела (запакованы)
+04h - byte код типа раздела
+05h - byte номер поверхности конца раздела
+06h - word номер цилиндра и сектора конца раздела (запакованы)
+08h - dword абсолютный (логический) номер сектора начала
+0Ch - dword размер раздела в логических секторах
Для LBA режима последние dword'ы указывают на реальные сектора.
А это значит, что число должно быть прямым номером сектора (на винтах я такое и наблюдаю обычно). Как это объяснить на флешках - хз... Вот:

Code: Select all

Offset       0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

0000001B0   00 00 00 00 00 2C 44 63  AB E2 AB E2 00 00 80 01   .....,Dc«в«в..€.
0000001C0   01 00 07 FE FF FF 3F 00  00 00 6B D5 7D 02 00 FE   ...юяя?...kХ}..ю
0000001D0   FF FF 07 FE FF FF AA D5  7D 02 1B 0A D4 06 00 00   яя.юяяªХ}...Ф...
На винте все в порядке. Номер сектора. А вот флешка, 16Гб, один раздел (обычная USB):

Code: Select all

Offset       0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

0000001B0   00 00 00 00 00 00 00 00  E9 96 E9 96 00 00 00 82   ........й–й–...‚
0000001C0   03 00 0B 06 E5 A1 00 20  00 00 00 A0 DE 01 00 00   ....е¡. ... Ю...
Я вообще в непонятках. Кстати, я знаю, что флешку можно форматнуть без таблицы разделов - да, прямо бутсектор в логическом секторе 0. И винда видит оба формата: с таблицей разделов и без них. Я хз как это происходит. Может, винда сначала смотрит ID бутсектора, если находит - юзает, если не находит - пытается посмотреть таблицу разделов. Если она валидна - юзает, если нет - то не юзает и выдает ошибку.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

ну если MBR отсутствует, это нетрудно предусмотреть, а вот неправильный адрес бут сектора... наверное придётся сделать поиск нужного блока. типа если адрес неподошёл искать бут сектор по заранее известным значениям - сигнатуре AA55 и имени системы - FAT16 или FAT32.
ещё вариант - CHS адрес, но там вообще каша какая то получается...
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

что то в таком духе:

Code: Select all

	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):
Image
на 2 гига (micro SD):
Image
и на 4 гига (micro SDHC):
Image

раздобыть бы ещё флешку <32 метров с FAT16 и что нибудь с FAT12 :)
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote:раздобыть бы ещё флешку <32 метров с FAT16 и что нибудь с FAT12 :)
Есть, но там ничего интересного. К тому же, ты можешь сделать раздел на ФАТ12 и на обычной флешке...
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

интересно в плане "а как там по умолчанию", тоже могут быть какие нибуть неточности или неизвестности.
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote:интересно в плане "а как там по умолчанию", тоже могут быть какие нибуть неточности или неизвестности.
Мелкие флешки форматируются в FAT16 (16МБ которые). Думаю, просто разрабы не хотят делать поддержку почти умершего FAT12, да и по ограничению 16МБ это лимит для FAT12 ЕМНИП.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

про FAT12 я бы даж не задумывался, если бы у меня не было флешки на 64мб... с FAT12 - шла в комплекте с к750 8) правда она совсем не SD. Но вот, именно то что она 64мб и FAT12 меня заинтересовало.
Image
Винда в свойствах не хочет показывать тип FAT... пришлось извратиться:
Image
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote:Винда в свойствах не хочет показывать тип FAT... пришлось извратиться:
Все делается намного проще (кликабельно):
Image
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

удобно, однако
Всё что ты видишь - лживый облик.