ch375b讀寫(xiě)U盤問(wèn)題

利用atmega16+ch375b+u盤實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)功能,現(xiàn)在CH375LibInit()通過(guò),CH375DiskConnect()也通過(guò),程序死在CH375DiskReady(),不知道啥原因,謝謝各位。函數(shù)庫(kù)用的大小為131k的CH375HFB.A,編譯器是ICCAVR6.31A。

你編譯之后生成的RAM以及代碼空間是多少?我記得好像MEGA16是沒(méi)辦法用的,建議你換成MEGA32應(yīng)該就可以了。


C:\icc\bin\imakew -f ch375b.mak iccavr -o ch375b -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @ch375b.lk -lch375 -lcatmega Device 91% full. warning: COFF no struct tag '_CMD_PARAM' found for symbol index 530 Done.

生成39KB的CH375B.hex文件. 謝謝


需要你看下你編譯之后的MAP文件,來(lái)看下RAM以及FLASH有沒(méi)有溢出,你告訴我HEX文件不能說(shuō)明什么問(wèn)題。


沒(méi)有找到MAP文件,求指點(diǎn)。


編譯之后在生成的工程文件里面就喲MAP文件的,看下CODE以及RAM暫用多少?


您說(shuō)的是HEX文件所在的目錄吧?沒(méi)有找到MAP文件,那里面有MP文件和MAK文件。 我在計(jì)算機(jī)其他位置找到MAP文件,用記事本打開(kāi)后是亂碼。


應(yīng)該就是MP文件,使用編譯器打開(kāi)就可以看到CODE以及RAM的分配了。 還有出現(xiàn)這種情況,查下USB口的UD+和UD-對(duì)地的電壓是多少?USB口的電源是否充足


這是MP文件,看不懂?。? NOTE: AVR Code addresses are word addresses All other addresses (including ones in FLASH) are byte addresses

Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ idata 0054 0037 = 55. bytes (rel,con,rom)

Addr Global Symbol ----- -------------------------------- 0054 __idata_start 008B __idata_end

Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ text 008C 39D2 = 14802. bytes (rel,con,rom)

Addr Global Symbol ----- -------------------------------- 0046 __start 0046 __text_start 0066 _exit 0067 _SPI_Init 006C _nRF905_SetReceiveMode 0077 _nRF905_Init 0084 _SPI_Write 0088 _SPI_Read 008C _nRF905_SetConfig 00A9 _nRF905_ReadData 00CA _nRF905_ReceivePacket 010F _delay_5us 0112 _delay_650us 0121 _delay_nms 0134 _delay 014A _CH375FileEnumer 0156 _CH375FileQuery 0169 _xQueryInterrupt 0180 _xDelay100uS 0189 _xDelayAfterWrite 0192 _xFileNameEnumer 0193 _CH375LibInit 01A5 _CH375_PORT_INIT 01AE _xWriteCH375Cmd 01E8 _xWriteCH375Data 0212 _xReadCH375Data 023C _mStopIfError 0245 _ch375 02A7 _main 02DB _CH375ByteLocate 0324 _CH375ByteRead 044F _CH375ByteWrite 05FD _CH375GetVer 05FF _CH375s01 062D _CH375s04 065B _CH375s17 0675 _CH375s18 0691 _CH375s42 0698 _CH375s49 06B0 _CH375s05 06CC _CH375Reset 06E4 _CH375Init 073A _CH375DirtyBuffer 074E _CH375DiskConnect 076F _CH375s23 07A3 _CH375s06 0870 _CH375s07 0943 _CH375s08 0BA6 _CH375s09 0C10 _CH375s10 0E54 _CH375s48 0FCF _CH375s11 0FE6 _CH375s12 103B _CH375FileOpen 1487 _CH375FileClose 14EC _CH375FileErase 158F _CH375FileCreate 17EA _CH375FileModify 18BE _CH375s13 1904 _CH375s24 1914 _CH375s14 1950 _CH375s15 1992 _CH375s40 19A4 _CH375s41 19B4 _CH375DiskReady 19EF _CH375s19 1A8B _CH375s20 1AF5 _CH375s25 1B67 _CH375s43 1B77 _CH375s44 1BB5 _CH375s47 1CCA _strcpy 1CD3 push_arg4 1CD5 push_arg2 1CD8 pop_gset2 1CDB pop_gset3 1CDE pop_gset4 1CE1 pop_gset5 1CE4 push_gset5 1CE6 push_gset4 1CE8 push_gset3 1CEA push_gset2 1CEC push_gset1 1CEF pop_gset1 1CF0 pop 1D03 lsl16 1D0A lsl32 1D16 lsl8 1D1C lsr16 1D23 lsr32 1D2F __text_end

Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ data 0060 0037 = 55. bytes (rel,con,ram)

Addr Global Symbol ----- -------------------------------- 0060 __data_start 0060 _TxAddress 0064 _RFConf 006F _table 007C _black 007E _changeline 0081 _title 0085 _showflag 0087 _val 0089 _data_end 008B _titlevalue 0097 __data_end

Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ bss 0097 0272 = 626. bytes (rel,con,ram)

Addr Global Symbol ----- -------------------------------- 0097 _DISK_BASE_BUF 0097 __bss_start 0297 _mCmdParam 02B5 _ExReceiveBuffer 02B8 _ReceiveBuffer 02BB _CH375v26 02BC _CH375v25 02BE _CH375v19 02C2 _CH375v18 02C3 _CH375v17 02C7 _CH375v14 02C9 _CH375v13 02CA _CH375v12 02CB _CH375v11 02CC _CH375v09 02D0 _CH375v08 02D4 _CH375v07 02D5 _CH375v06 02D7 _CH375v04 02D9 _CH375v03 02DD _CH375v02 02E1 _CH375v01 02E5 _pDISK_BASE_BUF 02E7 _CH375vSectorSize 02E9 _CH375Version2 02EA _CH375vFdtOffset 02EC _CH375vFdtLba 02F0 _CH375vDataStart 02F4 _CH375vDiskRoot 02F8 _CH375vCurrentOffset 02FC _CH375vFileSize 0300 _CH375vStartCluster 0304 _CH375vSecPerClus 0305 _CH375vDiskFat 0306 _CH375LibConfig 0307 _CH375DiskStatus 0308 _CH375IntStatus 0309 __bss_end

Area Start End Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ vector 0000 0004 = 4. bytes (abs,ovr,rom)

Files Linked [ module(s) ]

C:\icc\lib\crtatmega.o [ crtatmega.s ] nrf905.o [ nrf905.c ] delay.o [ delay.c ] main.o [ main.c ] [ CH375BYT.s, CH375MAI.s, strcpy.s, asave.s, gpop2.s, gpop3.s, gpop4.s, gpop5.s, gpush.s, lsl16.s, lsl32.s ] [ lsl8.s, lsr16.s, lsr32.s ]

User Global Definitions

ram_end = 0x45f hwstk_size = 0x10

User Base Address Definitions

func_lit = 0x54 data = 0x60 eeprom:1.512

USB口的電源電壓為5V稍多,和單片機(jī)兩端電壓相同。 UD+和UD-兩端的對(duì)地電壓為分別約是3.4和0。


ram_end = 0x45f 這個(gè)說(shuō)明你的RAM超出了單片機(jī)的RAM空間,MEGA16的RAM為1K(0X400),RAM超出的話肯定不能操作。還有你編譯的時(shí)候,CODE占程序空間多少?


這是便宜以后的: C:\icc\bin\imakew -f ch375b.mak iccavr -o ch375b -LC:\icc\lib\ -g -ucrtatmega.o -bfunc_lit:0x54.0x4000 -dram_end:0x45f -bdata:0x60.0x45f -dhwstk_size:16 -beeprom:1.512 -fihx_coff -S2 @ch375b.lk -lch375 -lcatmega Device full. warning: COFF no struct tag '_CMD_PARAM' found for symbol index 530 Done.

91% 是這個(gè)數(shù)字嗎?


你監(jiān)視一下是不是程序死在等中斷的地方了?你看一下CH375HF*.H文件中有一個(gè)QueryInterrupt是不是在這里死機(jī)了。 另外建議你換MCU,現(xiàn)在只是加進(jìn)去庫(kù)就用了91%的代碼空間了?;蛘吣銚Q為CH376芯片


現(xiàn)在CH375LibInit()通過(guò),CH375DiskConnect()也通過(guò),說(shuō)明中斷應(yīng)該沒(méi)有問(wèn)題的吧?。CH375DiskReady()和中斷有關(guān)系嗎? 這是中斷函數(shù): #ifndef NO_DEFAULT_CH375_INT /* 在應(yīng)用程序中定義NO_DEFAULT_CH375_INT可以禁止默認(rèn)的中斷處理程序,然后用自行編寫(xiě)的程序代替它 */ #if LIB_CFG_INT_EN == 0 /* CH375的INT#引腳連接方式為"查詢方式" */ void xQueryInterrupt( void ) /* 查詢CH375中斷并更新中斷狀態(tài) */ { #ifdef CH375_INT_WIRE /* 查詢中斷引腳 */ while ( CH375_INT_WIRE ); /* 如果CH375的中斷引腳輸出高電平則等待 */ #else /* 對(duì)于CH375B芯片還可以查詢命令端口的位7 */ while ( xReadCH375Cmd( ) & 0x80 ); /* 查詢CH375B的命令端口的位7為1說(shuō)明中斷引腳輸出高電平則等待 */ #endif xWriteCH375Cmd( CMD_GET_STATUS ); /* 獲取當(dāng)前中斷狀態(tài),發(fā)出命令后至少延時(shí)2uS */ CH375IntStatus = xReadCH375Data( ); /* 獲取中斷狀態(tài) */ if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 檢測(cè)到USB設(shè)備斷開(kāi)事件 */ else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 檢測(cè)到USB設(shè)備連接事件 */ } #else /* LIB_CFG_INT_EN != 0, CH375的INT#引腳連接方式為"中斷方式" */ void xQueryInterrupt( void ) /* 查詢中斷狀態(tài),等待硬件中斷 */ { while ( CH375IntStatus == 0 ); /* 子程序庫(kù)調(diào)用該子程序之前CH375IntStatus=0,硬件中斷后,由中斷服務(wù)程序置為非0的實(shí)際中斷狀態(tài)后返回 */ }

程序死在CH375DiskReady(),前天晚上有返回值,但不是正確值,昨天就沒(méi)有返回值了。

查了查,ATmega16l的ram應(yīng)該是夠用的的吧?。有個(gè)朋友他用atmega16+ch375b+u盤實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)功能,也是用的庫(kù)函數(shù),已經(jīng)實(shí)現(xiàn)了。 現(xiàn)在只想用atmega16+ch375b實(shí)現(xiàn)往U盤寫(xiě)東西,畢竟做了一段時(shí)間了,還有辦法實(shí)現(xiàn)嗎? 謝謝各位朋友,不勝感激。


謝謝


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频