⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbw_process.h

📁 U盘原代码,包括FAT16和USB的所有东东都是开放的,请认真看呀.
💻 H
字号:
INQUIRY:
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			
			NOP
			
			MOV		A,0xA8
			MOV		TEMP1,A
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
			n_nop		
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
			
			mov		a,#(inquiry_tb*2)/0x100
			mov		htbl,a
			mov		a,#(inquiry_tb*2)%0x100
			mov		ltbl,a
			nop
			nop

lop:		tbrdp	a
			MOV		IAC1,A
			n_nop
			djz		temp1,lopx
			jmp		lop
lopx:	


			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				
			call	delay	
inquiry_csw:
			jbs		iac1,1,inquiry_csw
			jbs		iac1,rxtxen,inquiry_csw						
			
			call	common_csw_head
			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP	

			MOV		A,#0
			MOV		IAC1,A
				N_NOP	
			MOV		A,#0
				N_NOP	

			MOV		IAC1,A
			MOV		A,#0
				N_NOP	
			MOV		IAC1,A
			MOV		A,#0
				N_NOP	
			MOV		IAC1,A
				
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				RET	
				
				
READ_FORMAT_CAPACITY:


			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			
				NOP
		
			MOV		A,#12
			MOV		TEMP1,A
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
			n_nop
					
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
							
			mov		a,#0
			mov		iac1,a
			mov		a,#0
			mov		iac1,a
			mov		a,#0
			mov		iac1,a
			mov		a,#0x08
			mov		iac1,a
			
		;	BANK	2
			call	DEC_fatendaddressrow1
			mov		a,#0x80//40
			sub		a,temp2
			call	DEC_fatendaddressrow1_1	
			
			mov		a,#0
			mov		iac1,a
		BANK	2
			JBC		bank2_check_flag,is_128_or_256,$+3
			mov		a,temp4//fatendaddressrow3
		BANK	0
			mov		iac1,a
			mov		a,temp3//fatendaddressrow2
			mov		iac1,a
			mov		a,temp2//fatendaddressrow1
			mov		iac1,a
			
			MOV		A,#4
			MOV		TEMP1,A
			
			mov		a,#(read_format_cap_tb*2)/0x100
			mov		htbl,a
			mov		a,#(read_format_cap_tb*2)%0x100
			mov		ltbl,a
			nop
			nop
			BANK	0
loop_format_cap_tb:	
				tbrdp	a
				mov		iac1,a
				n_nop
				djz		temp1,loop_format_cap_tb_exit
				jmp		loop_format_cap_tb	
loop_format_cap_tb_exit:		

			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			nop
			BS		IAC1,RXTXEN
			n_nop
			call	delay
read_format_csw:	
			jbs		iac1,sestall,read_format_csw
			jbs		iac1,rxtxen,read_format_csw
			call	common_csw_head
	
			MOV		A,#0xf0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				RET	


REQUEST_SENSE:	
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			
			NOP
			
			MOV		A,0xA8
			MOV		TEMP1,A
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
			n_nop		
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
				
			mov		a,#(request_sense_tb*2)/0x100
			mov		htbl,a
			mov		a,#(request_sense_tb*2)%0x100
			mov		ltbl,a
			nop
			nop	
loop_request_sense:		tbrdp	a
						mov		iac1,a
						n_nop
				djz		temp1,loop_request_sense_exit				
						jmp		loop_request_sense
loop_request_sense_exit:
			
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
			n_nop	
			call	delay
request_sense_csw:
			jbs		iac1,sestall,request_sense_csw
			jbs		iac1,rxtxen,request_sense_csw
		
	
			call	common_csw_head
			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				RET	
				
READ_CAPACITY:	
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			
			NOP
			
			MOV		A,0xA8
			MOV		TEMP1,A
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
			n_nop		
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
			;bank	2
			call	DEC_fatendaddressrow1
			mov		a,#0x80//40
			sub		a,temp2
			call	DEC_fatendaddressrow1_1	
			
			mov		a,#0
			mov		iac1,a
		BANK	2
			JBC		bank2_check_flag,is_128_or_256,$+3
			mov		a,temp4//fatendaddressrow3
		BANK	0
			mov		iac1,a
			mov		a,temp3//fatendaddressrow2
			mov		iac1,a
			mov		a,temp2//fatendaddressrow1
			mov		iac1,a
			
			bank	0
			mov		a,#(read_cap_tb*2)/0x100
			mov		htbl,a
			mov		a,#(read_cap_tb*2)%0x100
			mov		ltbl,a
			mov		a,#4
			mov		temp1,a
			
loop_read_cap:		tbrdp	a
					mov		iac1,a
					n_nop
				djz		temp1,loop_read_cap_exit				
						jmp		loop_read_cap
loop_read_cap_exit:

			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP
				
				call	delay
		
read_capacity_csw:
			jbs		iac1,sestall,read_capacity_csw
			jbs		iac1,0,read_capacity_csw					
							
			call	common_csw_head

			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop

			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				RET				
				

TEST_UNIT_READY:
			call	delay
			call	common_csw_head
			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			MOV		A,#0
				N_NOP
			MOV		IAC1,A
			MOV		A,#0
				N_NOP			
			MOV		IAC1,A
			MOV		A,#0
			MOV		IAC1,A
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
	
				RET				



READ10_28H:	

			CALL	FlashReset
			call	LOAD_RADDR
			call	address_conversion_according_to_bbitable
		    call	FlashContinueReadWriteAddress2G
			bank	0
			MOV		A,#32
			MOV		TEMP3,A	

LOOP_READ28_512:
				mov		a,#64
				mov		temp1,a
				
				_ADD_USB_EP1_WORK_SUB
				

				DJZ		TEMP3,RETURN_CSW_28			
				JMP		LOOP_READ28_512
RETURN_CSW_28:	
				mov		a,#1
				call	PAGE_ADDR_CHK_READ		
					ret
				
				
READ10_28H_csw:	
read28_csw:	
			call	common_csw_head

			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
				
			MOV		A,#0
			MOV		IAC1,A
				n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				nop
			bc		iac1,1
			BS		IAC1,RXTXEN
			n_nop
			jbs		iac1,0,$
			jbs		iac1,1,$
				RET	
				

MODE_SENSE_1A:
				
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			
			n_NOP
			
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,#4
			MOV		IAC1,A
			n_nop
					
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
			MOV		A,#0X03
			MOV		IAC1,A
				N_NOP
			MOV		A,#0X00
			MOV		IAC1,A
				N_NOP
			MOV		A,#0X00
			MOV		IAC1,A
				N_NOP			
			MOV		A,#0X00			
			MOV		IAC1,A
			n_nop
			
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP
			call	delay	
				
mode_sense_csw:
			jbs		iac1,sestall,mode_sense_csw
			jbs		iac1,rxtxen,mode_sense_csw				

			call	common_csw_head
			
			MOV		A,0xA8
			MOV		TEMP1,A
			MOV		A,#4
			
			SUB		A,TEMP1
			
			MOV		IAC1,A
					N_NOP		
			MOV		A,#0
			MOV		IAC1,A
					N_NOP
			MOV		A,#0
			MOV		IAC1,A
					N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
				RET	


FORMAT_UNIT_04:		RET

WRITE10_2AH:		
			MOV		A,#0X01
			MOV		RAMBS1,A
			mov		a,#ep2csr
			mov		iap1,a
			call	LOAD_WADDR
			call	address_conversion_according_to_bbitable
			call	FlashPageProgramWriteAddress
			bank	0
			MOV		A,#32
			MOV		TEMP2,A	
			
LOOP_WRITE2A_512:
				mov		a,#64
				mov		temp1,a	

			JBC		BULK_STATE,OUT_USB_FIFO_FULL,$
			BC		BULK_STATE,OUT_USB_FIFO_FULL
			jbs		iac1,0,$
			MOV		A,#EP2DAR
			MOV		IAP1,A
			BC		Flash_Ctrl_Port_B,_CE
LOOP_EP2_WORK_64:	
			MOV		A,IAC1
			MOV		Flash_Data_Port,A

			BC		Flash_Ctrl_Port_B,_WE
				NOP		;40nS
			BS		Flash_Ctrl_Port_B,_WE
			DJZ		TEMP1,LOOP_EP2_WORK_64_EXIT
			JMP		LOOP_EP2_WORK_64
			
LOOP_EP2_WORK_64_EXIT:
			BS		Flash_Ctrl_Port_B,_CE
						
			MOV		A,#EP2CSR
			MOV		IAP1,A
				NOP	
			BS		IAC1,RXTXEN
				N_NOP
		
			DJZ		TEMP2,RETURN_CSW_2A			
			JMP		LOOP_WRITE2A_512			
RETURN_CSW_2A:
			mov		a,#1
			call	PAGE_ADDR_CHK_WRITE
			call	FlashPageProgramWriteDataOK
					RET
					
						
WRITE10_2AH_csw:
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			nop
			bc		iac1,rxtxen
			n_nop
			bc		iac1,sestall
			n_nop
WRITE2A_csw:
			call	common_csw_head
			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop

			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_NOP	
			nop
				RET	


MEDIA_REMOVAL_CSW:	
			call	delay
			call	common_csw_head
			
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
				N_NOP
			MOV		A,#0
			MOV		IAC1,A
			n_nop
			MOV		A,#EP1CSR
			MOV		IAP1,A
				NOP
			BS		IAC1,RXTXEN
				N_N	RET				

WRITE_2A_swap_area:			
			bank	0
			mov		a,0xb7
			mov		write_block_NOL,a
			mov		a,0xb6
			mov		write_block_NOH,a

			clr		col_add_write1		
			clr		col_add_write2
			mov		a,0xb2
			mov		write_row_addr3_temp,a
			mov		ROW_ADD_WRITE3,a
			mov		a,0xb3
			mov		write_row_addr2_temp,a
			mov		ROW_ADD_WRITE2,a
			mov		a,0xb4
			mov		write_row_addr1_temp,a
			mov		ROW_ADD_WRITE1,a
			and		a,#0xc0
			xor		a,write_row_addr1_temp
			jbc		stts,z,none_zero_page
go_on_writing:		
			mov		a,#64
			sub		a,write_block_NOL
			jbc		stts,c,to_swap_area_zero_page
			
			call	erase_original_data_area
			mov		a,#64
			mov		temp_NO,a
			clr		col_add_write1		
			clr		col_add_write2
			call	loop_write_block   			//temp_NO times	2KB
			mov		a,#64
			sub		write_block_NOL,a
			jbs		stts,z,finish_writing
			jmp		go_on_writing
			
to_swap_area_zero_page:
			mov		a,ROW_ADD_WRITE1
			mov		write_row_addr1_temp,a
			mov		a,ROW_ADD_WRITE2
			mov		write_row_addr2_temp,a
			mov		a,ROW_ADD_WRITE3
			mov		write_row_addr3_temp,a

			mov		a,write_block_NOL
			mov		temp_NO,a
			mov		swap_page_address1,a
			
			mov		a,#64
			mov		page_count1,a
			mov		a,write_block_NOL
			sub		page_count1,a

			call	erase_swap_area
			call	load_swap_address1
			mov		a,page_count1
			mov		move_relic_count,a
			call	move_data_to_swap_area 		/////////?????????

			call	erase_original_data_area
			call	load_swap_address1
			mov		a,page_count1
			mov		move_relic_count,a
			call	move_data_back

			mov		a,write_row_addr1_temp
			mov		ROW_ADD_WRITE1,a
			mov		a,write_row_addr2_temp
			mov		ROW_ADD_WRITE2,a
			mov		a,write_row_addr3_temp
			mov		ROW_ADD_WRITE3,a
			clr		col_add_write1		
			clr		col_add_write2
			call	loop_write_block      ///// write_data_from_ep2
			
			jmp		finish_writing

			
none_zero_page:

			mov		a,#0xc0
			and		a,ROW_ADD_WRITE1
			sub		a,write_row_addr1_temp
			mov		page_count1,a
			mov		move_relic_count,a
			clr		swap_page_address1
			
			call	erase_swap_area
			call	load_swap_address1
			call	move_data_to_swap_area

			mov		a,write_row_addr1_temp
			and		a,#0x3f
			add		a,write_block_NOL
			mov		swap_page_address2,a
			sub		a,#63
			jbc		stts,c,remain_transfering
			add		a,#1
			mov		page_count2,a
			mov		move_relic_count,a
			call	load_swap_address2
			call	move_data_to_swap_area
			call	erase_original_data_area

			mov		a,page_count1
			mov		move_relic_count,a
			call	load_swap_address1
			call	move_data_back
			mov		a,page_count2
			mov		move_relic_count,a
			call	load_swap_address2
			call	move_data_back
			
			mov		a,write_block_NOL
			mov		temp_NO,a
			mov		a,write_row_addr1_temp
			mov		ROW_ADD_WRITE1,a
			mov		a,write_row_addr2_temp
			mov		ROW_ADD_WRITE2,a
			mov		a,write_row_addr3_temp
			mov		ROW_ADD_WRITE3,a
			clr		col_add_write1		
			clr		col_add_write2

			call	loop_write_block 
			jmp		finish_writing

remain_transfering:	
			mov		a,write_row_addr1_temp
			and		a,#0x3f
			sub		a,#64
			mov		temp_NO,a
			sub		write_block_NOL,a		
			call	erase_original_data_area
			mov		a,page_count1
			mov		move_relic_count,a
			call	load_swap_address1
			call	move_data_back
			
			mov		a,write_row_addr1_temp
			mov		ROW_ADD_WRITE1,a
			mov		a,write_row_addr2_temp
			mov		ROW_ADD_WRITE2,a
			mov		a,write_row_addr3_temp
			mov		ROW_ADD_WRITE3,a
			clr		col_add_write1		
			clr		col_add_write2
			call	loop_write_block 
			mov		a,write_block_NOL	
			jbs		stts,z,finish_writing
			jmp		go_on_writing			

finish_writing:
			call	write10_2ah_csw			
			RET
			
;=================================================================

loop_write_block:			
			CALL	WRITE10_2AH
			djz		TEMP_NO,loop_write_block_exit
			jmp		loop_write_block
loop_write_block_exit:	ret
			
;=================================================================
COMMON_CSW_HEAD:	
			MOV		A,#0X01
			MOV		RAMBS1,A
			MOV		A,#EP1CSR
			MOV		IAP1,A
			nop
			bc		iac1,0
			n_nop
			bc		iac1,1
			n_nop
			MOV		A,#13
			MOV		TEMP1,A
			MOV		A,#EP1CTR
			MOV		IAP1,A
			MOV		A,TEMP1
			MOV		IAC1,A
				n_nop	
			MOV		A,#EP1DAR
			MOV		IAP1,A
				NOP
			MOV		A,#0X55
			MOV		IAC1,A
				N_NOP
			MOV		A,#0X53
			MOV		IAC1,A
				N_NOP
			MOV		A,#0X42
			MOV		IAC1,A
				N_NOP
			MOV		A,#0X53			
			MOV		IAC1,A
			n_nop
			MOV		A,0XA4
			n_nop
			MOV		IAC1,A
			n_nop
			MOV		A,0XA5
			n_nop
			MOV		IAC1,A
			n_nop
			MOV		A,0XA6
			n_nop
			MOV		IAC1,A
			n_nop
			MOV		A,0XA7
			n_nop
			MOV		IAC1,A
			n_nop
				RET			
			
								
;=================================================================		
delayxx:	call	delay
			call	delay
			call	delay
			call	delay
			call	delay
			call	delay
			call	delay
			call	delay
			call	delay
			ret
delay:		
			mov		a,#255			//2500cycles
			mov		temp1,a
			
mmmm:		nop
			nop
			djz		temp1,xxxxx		
			jmp		mmmm
xxxxx:		ret


				

							

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -