prepojenie PIC a CDROM cez ATA

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#16 Příspěvek od mikollar »

precitat prave ze neviem, zadame sector count = 1 adresy a hlavy , LBA mod ale stale po precitani sektora to hodi inu hodnotu

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#17 Příspěvek 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...

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#18 Příspěvek od mikollar »

jaaaj ja som ale vol ja som myslel že ked dam 1 tak staci precitat data register raz :oops: , nieje ta hodnota 20h na precitanie? http://elektronika.kvalitne.cz/ATMEL/ne ... F_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
Naposledy upravil(a) mikollar dne 02 pro 2007, 21:37, celkem upraveno 1 x.

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#19 Příspěvek od Kado »

Sorry prikaz "read sector" je hodnota #20h, "write sector" je #30h atd

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#20 Příspěvek 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

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#21 Příspěvek 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

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#22 Příspěvek 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...

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#23 Příspěvek 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

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#24 Příspěvek 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...

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#25 Příspěvek 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.

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#26 Příspěvek 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

Uživatelský avatar
Kado
Příspěvky: 44
Registrován: 27 říj 2007, 02:00
Bydliště: PB, SVK

#27 Příspěvek 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...

Jirka
Příspěvky: 2031
Registrován: 01 črc 2005, 02:00
Bydliště: zbídačený kraj
Kontaktovat uživatele:

#28 Příspěvek od Jirka »

Tak jak, už to hraje?
*****

Uživatelský avatar
mikollar
Příspěvky: 1406
Registrován: 26 pro 2004, 01:00
Bydliště: Košice - okolie

#29 Příspěvek od mikollar »

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

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“