SD kaart op cypress psoc1 mcu met petitFS mount niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
Hallo

Ik ben al een tijdje aan het stoeien om een SD kaart te gebruiken icm een 8 bit Cypress PSOC1 controller.
Hiervoor wilde ik PetitFS gebruiken ivm geheugenbeperkingen.

Na het nodige klussen en ombouwen draait alles op de cypress, de kaart wordt geinitialiseerd, maar bij het mounten gaat het fout.

de bedoeling is:
lees het boot record sector 0 (de laatste 2 bytes). Dit moet 0xAA55 zijn (zo niet is het geen boot record)
Als dat klopt lees je 2 identificatie bytes in van FAT (0x4146), dit kan op 2 locaties staan afhankelijk van de FAT versie.
Als deze identificatie aanwezig is --> valide FAT partitie.

Geen identificatie gevonden --> mrb, zoek de LBA in de partition table (sector 0). zoek nogmaals naar identificatie bytes, maar nu op de LBA ipv sector 0.


De eerste search faalt (wel 0xAA55 maar geen 0x4146), terwijl die wel aanwezig is bij sector 0 volgens HxD:
Afbeeldingslocatie: https://dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-01-16%2016.09.39.png

De reden die ik daarvoor vond was dat dergelijke programma's vaak ook alleen vanaf de LBA kunnen lezen. Wat ik dus zie als sector 0 in HxD is eigenlijk de LBA.

Bij de tweede search heeft hij voor de LBA gevonden 0x00 20 00 00 in de partitietabel. Afhankelijk van de endianess zou dat uitkomen op 8192 of 131072. Die eerst lijkt me waarschijnlijker. en als ik in HxD kijk vind ik inderdaad iets wat lijkt op een partitie qua data, maar niet met 0xAA55 of 0x4146 ik zou denken dat ik alweer te ver zit:
Afbeeldingslocatie: https://dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-01-16%2016.20.26.png

Sterker nog. Als ik kijk wat het programma gaat doen. Die gaat sector 16384 uitlezen (kan ik zien op de usb logic analyzer). Buiten dat ik geen idee heb hoe hij hierop komt lijkt dit al helemaal nergens op:
Afbeeldingslocatie: https://dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-01-16%2016.22.53.png
al is het wel het begin van een of andere datareeks. een aantal sectoren ervoor zijn allemaal 0.


Al met al weet ik niet meer waar ik het moet zoeken. Het zou niet zo ingewikkeld moeten zijn. Maar ik zit nu al 2 dagen te klooien om misschien wel iets heel simpels...
Wie heeft hier ervaring mee?

Ik heb de bijbehorende software onderaan gezet voor leesbaarheid.

Alvast bedankt
timberleek

edit:
toch wel veel code. Ik upload het even ergens :+

edit2:
zo dan maar even:
https://dl.dropboxusercontent.com/u/3264324/petitfs.rar


edit3:
Nog een reden waarom een lba van 16k sectoren niet klopt: Op de partitie staat een txt file met "hello world" erin. Die vind ik in HxD terug op sector 8384:

Afbeeldingslocatie: https://dl.dropboxusercontent.com/u/3264324/Schermafdruk%202015-01-16%2016.51.07.png

[ Voor 100% gewijzigd door timberleek op 16-01-2015 16:52 ]


Acties:
  • 0 Henk 'm!

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 20:55
Een door fatfs (grote broer van petitfs) geformatteerd FAT systeem ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  EB FE 90 4D 53 44 4F 53 35 2E 30 00 02 40 01 00  ëþ.MSDOS5.0..@..
00000010  01 00 02 00 00 F8 A0 01 3F 00 FF 00 3F 00 00 00  .....ø .?.ÿ.?...
00000020  C1 97 3A 00 80 00 29 FD 7A 30 46 4E 4F 20 4E 41  Á—:.€.)ýz0FNO NA
00000030  4D 45 20 20 20 20 46 41 54 20 20 20 20 20 00 00  ME    FAT     ..
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000140  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA  ..............Uª

Dat heb je een idee wat Windows aan overbodige data toevoegd.

Verder vermoed ik dat wanneer je de gegevens van sector0 niet goed kan lezen. Er iets mis gaat in je Disk I/O Interface, welke je zelf moet aanleveren. Test dit eens door een stuk text naar sector 0 te schrijven, en te lezen, via je cypress.

Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
Als ik de specs mag geloven is die geformatteerd als FAT16, niet FAT32. Bij FAT32 zou de 464154 sequence op offset 0x53 beginnen (en dan zou er ook FAT32 staan).

Maar dat maakt niet zoveel uit.

Ik weet wel dat de juiste sector wordt opgevraagd van de sd kaart (kan ik zien op de Logic sniffer). Of het ook goed binnenkomt zal ik even moeten bekijken. Even kijken of ik nog wat resources kan vrijmaken zodat ik een extra uart module kan aansturen. Dan kan ik de ingelezen sector gewoon doorsturen naar de pc. Makkelijker dan zoveel data op een schermpje oid toveren.


edit:
Een uart blok is gefixt. Bedacht me alleen net pas dat ik hier geen usb-serial module heb. Het uitlezen moet nog even wachten tot zondagavond/maandag helaas

wordt vervolgt

[ Voor 14% gewijzigd door timberleek op 17-01-2015 20:51 ]


Acties:
  • 0 Henk 'm!

  • timberleek
  • Registratie: Juli 2009
  • Laatst online: 08-09 22:13
Er gaat inderdaad iets niet goed bij de IO interface.

De eerste read (om 0x55AA) te vinden gaat goed. Dat staat netjes in het read buffer.
Echter bij de volgende read (voor 0x4146) is het read buffer leeg.