Stránka 2 z 2
Napsal: 02 pro 2007, 20:56
od mikollar
precitat prave ze neviem, zadame sector count = 1 adresy a hlavy , LBA mod ale stale po precitani sektora to hodi inu hodnotu
Napsal: 02 pro 2007, 21:26
od Kado
Takto: aky mas HDD?
ked chces precitat sektor musis postupovat takto:
najprv zistit precitanim z registra "status" bit "busy" a cakat az pokial ho HDD nastavi do log.0
potom zapises do prislusnych registrov hodnoty napr. citame sektor 0 LBA=0
register "head" #1110xxxxb =>LBA, HDD MASTER a kde xxxx su najvysie 4bity z 28bitovej LBA adresy
register "cylinder msb" bity 23 az 16 LBA adresy
register "cylinder lsb" bity 15 az 8 LBA adresy
register "sector" bity 7 az 0 Z LBA adr
register "sector counter" obsahuje pocet sektorov kt. chces precitat ak zadas #0 tak musis precitat 256 sektorov, ak zadas #1 tak sa precita jeden sektor
-ked mas toto zapisane zapise do registra "command" cislo prikazu read= #10h
-teraz musis cakat minimalne 400ns na spracovanie
potom citas z registra "status" bity DRQ a BSY, pricom DRQ musi byt log.1 a BSY musi byt log.0, a este bit ERROR musi byt v log.0, inak nemozes pristupit k citaniu dat
ak su spominane bity ok, tak pristupujes k citaniu dat pricom si treba uvedomiz, ze zbernica je 16bitiva, to znamena ze po kazdom "read pulze" precitas 2bajty a ty potrebujes precitat cely sektor tj 512byte, preto musis citane opakovat celkovo 256krat...
Napsal: 02 pro 2007, 21:30
od mikollar
jaaaj ja som ale vol ja som myslel že ked dam 1 tak staci precitat data register raz

, nieje ta hodnota 20h na precitanie?
http://elektronika.kvalitne.cz/ATMEL/necoteorie/IDEtesty/rizeni_CF_HDD.html
Teraz uz chapem tomu co je tam pisane
Idm to vyskusat, dakujem za vysvetlenie
EDIT: HDD mam 2,5GB western digital.
dakujem za uistenie na ten prikaz 20h
Napsal: 02 pro 2007, 21:34
od Kado
Sorry prikaz "read sector" je hodnota #20h, "write sector" je #30h atd
Napsal: 02 pro 2007, 22:39
od mikollar
#1110xxxxb ak to zadam takto tak HDD sa zacne vypinat #0110xxxxb CRC musim nechat zapnute vtedy sa nevypina, ale data odtial nie a nie dostat, este idem sprtat dalej
Napsal: 03 pro 2007, 00:17
od mikollar
mam tento problem. zapisem udaje sector sector count ... atd.
Do comand registru zapisem 30H cakam 400ns
otestujem BUSSY a DRQ ak su 0 a 1 zvolim adresu DATA REGISTER, na datove vodice privediem data a signal RW stiahnem na LOG0 cakam 400ns RW signal spat do LOG1 a odteraz somnou prestane HDD komunikovat.
Prikladam asm kod pre zapis: WAIT je cakanie odpocitava sa register naplneny hdnotou 255 do 0.
Na PORTD su privedene vodice A0 A1 A2, A0 je PORTD,0 , A1 je PORTD,1 , A2 je PORTD,2
Hodnoty adries mam ulozené tu:
MOVLW B'00000000'
MOVWF DATA_R
MOVLW B'00000010'
MOVWF COUNT_R
MOVLW B'00000011'
MOVWF SECTOR_R
MOVLW B'00000100'
MOVWF LOW_R
MOVLW B'00000101'
MOVWF HI_R
MOVLW B'00000110'
MOVWF DHR_R
MOVLW B'00000111'
MOVWF STATUS_R
_WR EQU 0 ;port 0
_RD EQU 1 ; port 1
Prosim v com moze byt problem resp. kde robim chybu?
Dakujem
P.S. vodice CS0 a CS1 su trvalo pripojene na GND a +5V
Kód: Vybrat vše
WRITE
BSF STATUS,RP0
MOVLW .0
MOVWF TRISB
BcF STATUS,RP0
;--------30H DO COMMAND REG ----------------------------
MOVFW STATUS_R ;do comand registru
MOVWF PORTD
MOVLW 30H ;zapis
MOVWF PORTB
bcf PORTE,_WR ;POTVRD/ZAPIS
CALL WAIT
CALL WAIT
BSF PORTE,_WR ;POTVRD/ZAPIS
ZAPIS CALL WAIT
CALL WAIT
CALL WAIT
CALL WAIT
CALL WAIT
CALL BUSSY ;zisti bussy 0
call DRQ ;zisti DRQ 1
MOVFW DATA_R ;zvolit DATA REGISTER
MOVWF PORTD
MOVLW .0 ;hodnota do DATA REGISTRU
MOVWF PORTB
bcf PORTE,_WR ;POTVRD/ZAPIS
CALL WAIT
CALL WAIT
CALL WAIT
BSF PORTE,_WR ;POTVRD/ZAPIS
DECFSZ TMP3,F ;TMP3 hodnota 0 pre zopakovanie 256 krat
GOTO ZAPIS
RETURN
Napsal: 03 pro 2007, 17:40
od Kado
mikollar píše:Do comand registru zapisem 30H cakam 400ns
pri citani sektora z hdd zapisujes do command registru 20h anie 30h!
inak ak ides citat z data registra resp.ostatnych registrov, tak pouzijes riadiaci signal "IORD" tj. z log.1 do Log.0 a zas do log.1, ak ides zapisovat do registrov tak na zapis pouzijes signal "IOWR" z klud. stavu tj. log.1 do log.0 a znova do log.1 atd...
Napsal: 03 pro 2007, 17:52
od mikollar
citanie mi ide aspon dufam teda, tento program je na zapis a to mi nejde stlae sa to sekne
dakuje za vsetky rady
Napsal: 03 pro 2007, 18:02
od Kado
najprv dobre sprav citanie z HDD, a potom sa pustaj do zapisu, ten je zrejme zlozitejsi, ja osobne nemam este vyskusany zapis sektora do hdd...myslim, ze chces z toho spravit mp3 prehravac, takze si myslim, ze na zaciatok citanie staci a este bude zaujmave rozlusknut suborovy sytem FAT16 resp FAT32...
Napsal: 03 pro 2007, 18:05
od mikollar
okis tak skusim naformatovat HDD v PC snad sa mi to podari na FAT16 na strnake co je tu v otkaze je to pisane tak to skuim cez to, a skusim precitat uvodne sektory.
Napsal: 03 pro 2007, 22:37
od mikollar
skusil som precitat LBA 0 , vsetkych 512B, stale mi to hadze hodnotu 58h, len na 2 miestach to vyhodi hodnotu 5Ah, HDD je naformatovany na 2 partition FAT16
Zbytok programu je v predchadzajucom prispevku
Mam chybu v zadavani dat do HDD v programe?
Dakujem
Kód: Vybrat vše
READ
BSF STATUS,RP0
MOVLW .0
MOVWF TRISB
BcF STATUS,RP0
;--------20H DO COMMAND REG ----------------------------
MOVFW STATUS_R
MOVWF PORTA
MOVLW 20H ;CITAJ
MOVWF PORTB
bcf PORTE,_WR ;POTVRD/ZAPIS
CALL WAIT
BSF PORTE,_WR ;POTVRD/ZAPIS
CALL WAIT
CITAJ CALL BUSSY
call DRQ
BSF STATUS,RP0
MOVLW .255
MOVWF TRISB
BcF STATUS,RP0
MOVFW DATA_R
MOVWF PORTA
bcf PORTE,_RD ;POTVRD/ZAPIS
CALL WAIT
CALL WAIT
CALL WAIT
MOVFW PORTB ;POSLI DOLNYCH 8 BITOV NA RS232
CALL SER_TX
MOVFW PORTD ;POSLI HORNYCH 8 BITOV NA RS232
CALL SER_TX
BSF PORTE,_RD ;POTVRD/ZAPIS
CALL WAIT
DECFSZ TMP3,F
GOTO CITAJ
BSF STATUS,RP0
MOVLW .0
MOVWF TRISB
BcF STATUS,RP0
RETURN
Napsal: 03 pro 2007, 22:57
od Kado
No to neviem ci mas chybu v programe, ale ked precitas MBR (LBA=0) tak posledne dva bajty obsahuju signaturu 55h a AAh...
Napsal: 27 led 2008, 12:25
od Jirka
Tak jak, už to hraje?
Napsal: 27 led 2008, 12:29
od mikollar
este nie

,mal som trocha viac povinnosti v skole (skusky), ale pracujem na tom, ak sa to podari hodim sem komplet dokumentaciu