搜索
bottom↓
回复: 313

发布我的小作品--U盘(实际是USB SD卡读卡器) ATmega168+PDIUSBD12+SD (内含GCC源码

[复制链接]

出0入0汤圆

发表于 2007-3-9 20:13:18 | 显示全部楼层 |阅读模式
这是最新的代码,原贴在46楼    -- 20071223 bozai加入
点击此处下载armok01148323.zip


发布我的小作品--U盘(实际是SD卡读卡器) ATmega168+PDIUSBD12+SD (内含GCC源码和原理图)



年前里曾在44b0x板子上实现移动硬盘的功能,年后利用在阿莫这买的一片TQFP封装的m168 和一年前在上海赛格买的D12,再加上花15大洋的SD读卡器上的SD插槽。终于把这个东西做出来了。



这里把它公布出来,有兴趣的朋友可以仿制,修改,大家共同探讨。



也许选SD卡作为存储设备加上没有选择带总线的AVR单片机是个错误,这个小东西的速度,读只有370KB/s 写只有198KB/s 。为了提高sd卡的操作速度,晶振选用20Mhz。

AVR芯片用m8 和m88都可。



程序标准请求部分是参照原来那块ARM板子上的例子,MassStorage那部分自己花了很久才搞出来,由于没用中断,所以有点乱。大家凑或着看吧。



整个东西实用性不大,不过可以做为学习USB使用。板子是在万用板上焊的,有兴趣的朋友可以做PCB。









这是全部资料的压缩包

另外程序是在AvrStudio4.13b528 + WinAVR20070122下编译的

点击此处下载armok01146099.zip



这是板子的正面图





这是板子的反面图





放在盒子里





插在CH375做的mp3上可以正常播放







插在电脑上





可以显示自定义的信息




20080129:(上传一些清晰的照片):
1
2
3
4

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2007-3-9 20:22:29 | 显示全部楼层
哈哈,这么快就变cool了
头像被屏蔽

出0入0汤圆

发表于 2007-3-9 20:27:21 | 显示全部楼层
谢谢共享!



Cool!

出0入0汤圆

发表于 2007-3-9 20:37:57 | 显示全部楼层
强就一个字!佩服,羡慕呀



如果成本低点就好了,前几天买一个读卡器才10元,我拆开一看就一个黑陀陀(COB),再没每别的芯片了。

出0入0汤圆

 楼主| 发表于 2007-3-9 20:44:05 | 显示全部楼层
做这个就是为了玩嘛,当然没法跟产品比,学习学习USB。

我以前买一个hub也像你那样,没什么东西。

15块的那个有个GL817

出0入0汤圆

发表于 2007-3-10 11:57:55 | 显示全部楼层
支持!!是学习USB的一个非常非常好的作品!!

出0入0汤圆

发表于 2007-3-10 12:31:15 | 显示全部楼层
收藏  顶了  谢谢分享

出0入0汤圆

发表于 2007-3-10 12:50:01 | 显示全部楼层
谢谢楼主!

支持中

出0入0汤圆

发表于 2007-3-10 12:51:05 | 显示全部楼层
收藏  顶了

出0入0汤圆

发表于 2007-3-11 21:36:08 | 显示全部楼层
楼主的焊工一流,图中红色的是什么线

出0入0汤圆

 楼主| 发表于 2007-3-11 21:43:27 | 显示全部楼层
谢谢,是漆包线。

线径大概是0.3mm,从彩电偏转线圈上拆下来的。

出0入0汤圆

发表于 2007-3-11 21:56:30 | 显示全部楼层
焊接的时候有没有什么技巧

出0入0汤圆

 楼主| 发表于 2007-3-11 21:59:30 | 显示全部楼层
总的来说,要求焊功要过关。

这样焊贴片元件,就不能用焊锡丝了,很容易就把两个脚粘在一起,还有即使粘在一起要能用烙铁把它分开。所有 的线焊时都要事先上上锡。

出0入0汤圆

发表于 2007-3-11 22:02:11 | 显示全部楼层
谢谢楼主!!!

出0入0汤圆

 楼主| 发表于 2007-3-11 22:03:54 | 显示全部楼层
不客气!

出0入0汤圆

发表于 2007-3-11 23:41:35 | 显示全部楼层
厉害!!!!!!

佩服佩服

出0入0汤圆

发表于 2007-3-12 09:20:29 | 显示全部楼层
牛。

出0入0汤圆

发表于 2007-3-12 10:12:57 | 显示全部楼层
厉害啊~搂主要是把这个东西做出来,应该会有人买的~

出0入0汤圆

 楼主| 发表于 2007-3-12 10:40:28 | 显示全部楼层
穷啊,哪有钱搞这东西,多了做不起,少了价格又高。这边材料也不好买。如果市场不错,阿莫愿意的话,阿莫可以考虑做一批卖卖啊。

出0入0汤圆

发表于 2007-3-13 08:41:11 | 显示全部楼层
那几个贴片是如何处理的啊?哈哈

来几个清晰点点的图片哟~

顺便想问问s这个读卡器的设计流程的.



对于SCSI命令是不是只在read(10)与write(10)的时候才和sd卡的读写函数联系,其他的都没有关系.




-----此内容被hellokilly于2007-03-13,08:45:49编辑过

出0入0汤圆

 楼主| 发表于 2007-3-13 09:29:30 | 显示全部楼层
手机拍不清。贴片按我的通用做法,下面放一个绝缘的有能承受一定温度的薄片(如那种木纹胶带),把芯片四周固定在焊盘上,然后再把脚一个一个用漆包线引出来。



quote:

对于SCSI命令是不是只在read(10)与write(10)的时候才和sd卡的读写函数联系,其他的都没有关系.



/*********/



可以这么说,在发read capacity的时候要返回卡的容量,要读卡的csd寄存器然后计算出来。不过这是在卡的初始化时已经读好了。所以当用到read10 write10的时候才会去操作卡。

出0入0汤圆

发表于 2007-3-13 12:39:03 | 显示全部楼层
厉害

出0入0汤圆

发表于 2007-3-13 21:59:22 | 显示全部楼层
非常感谢bozai .怎么会显示中文章其波的U盘啊 哈哈

出0入0汤圆

 楼主| 发表于 2007-3-14 09:37:23 | 显示全部楼层
我在程序中表明了要改哪些地方,只要修改那些信息就可以了。

不过有些地方需要用unicode编码,有些用gbk编码(这个我也说明了)

出0入0汤圆

发表于 2007-3-15 12:32:46 | 显示全部楼层
太棒了!

出0入0汤圆

发表于 2007-3-21 12:54:37 | 显示全部楼层
我用修改了楼主的程序(用M64 + Ext 32k RAM总线方式,XTAL=8MHZ),为什么出现只有10%的机率USB枚举OK?以下为正常图片:







出0入0汤圆

 楼主| 发表于 2007-3-21 13:57:50 | 显示全部楼层
要注意D12的操作时序,因为AVR的速度比D12高,所以底层的驱动函数要仔细写。

另外布线也要注意干扰问题。

你的问题多是D12的时序有问题。

出0入0汤圆

发表于 2007-3-21 15:43:40 | 显示全部楼层
cooool!楼主牛人!

出0入0汤圆

发表于 2007-3-22 08:23:42 | 显示全部楼层
谢谢楼主!

收藏。

出0入0汤圆

发表于 2007-3-22 12:54:46 | 显示全部楼层
发现有两个问题:

 1.mmc写入时,偶尔会改写其它文件(实际上是存在的,估计入口簇号等被改变)。不知   为何?

 2.系统采用3.3V供电,通过USB串联1N4007隔离后HT7130稳压。发现   隔离的电源指示LED会闪烁(写卡时)。

 

 我的速度N慢,8M时钟,见下图:

出0入0汤圆

发表于 2007-3-22 13:03:49 | 显示全部楼层
好、很好、非常好。

出0入0汤圆

 楼主| 发表于 2007-3-22 15:21:17 | 显示全部楼层
回30楼:

1、我的SD_MMC程序只限于SD卡,MMC卡没有试过。

我用SD卡时至今没出问题。不过当时有张SD卡读写有问题,某个簇有问题。本以为我程序的问题,但是后来用别的SD卡读卡器也有问题。所以是卡坏了,后来只能分区时绕过这个坏扇区。

另外做mp3时,一个马来的朋友已经向我报告SD_MMC驱动MMC卡不能用。所以应该是使用MMC卡的问题。主要我没有MMC卡所以就没办法测试了。



2、HT7130驱动电流好像只有30ma吧,因为SD卡消耗的电流差不多就有这个数了。再加上芯片LED的消耗,估计HT7130受不了。闪烁的原因就是在写卡时SD卡电流猛增造成电压下降,另外程序是每接受到一个扇区数据就写一个扇区,然后再接受数据,这就造成卡式非连续写的,因此闪烁。



PS:速度慢的原因有:模拟总线,SD卡spi模式操作(8M时,卡操作最多是4Mbps,就是500KB/s,加上命令等所以卡操作的速度本来就慢,加上模拟总线就更慢了)

出0入0汤圆

发表于 2007-3-22 18:19:42 | 显示全部楼层
电路稍微修改了一下,

把一个AD用起来,到时候看看能不能在PC上显示M168采集回来的值.

另外在电路上加了一片DS1302,多加一个LED,正好把IO用光.

今天已经去发作了5块pcb,

最近几天先看看程序吧

谢谢楼主



以前用过FT232,用USB转串口,不过那个不用写程序.

没有真正写过USB的程序, 看看这个能不能入门.



请教楼主一个问题,:

                用D12和M168+SD卡做U盘或者移动硬盘的时候,

                M168还能不能把比如 AD的值传回到PC上?

                比如 我要在PC上看AD转换的值, 但是同时U盘是继续工作的.

                可能问的太菜了,见笑!



问 阿莫:

        你这里D12有得卖吗?谢谢!

出0入0汤圆

发表于 2007-3-22 18:26:03 | 显示全部楼层




板的图片,

先做回来试试看再说


-----此内容被fogee于2007-03-22,18:29:38编辑过

出0入0汤圆

 楼主| 发表于 2007-3-22 18:47:45 | 显示全部楼层
回33楼 fogee

应该可以这么做,不过程序要改很多,还要写个PC驱动程序,做界面等。这个我不会了。

也就是利用两个配置来实现,但是我不确定。我也是刚玩USB,而且是忙里偷闲的玩。



PS:板子画的很精致

出0入0汤圆

发表于 2007-3-22 21:23:29 | 显示全部楼层
嘿嘿,PC机上的程序我也不在行啊,一起学习吧



板子调试OK的话,送你一块好了

出0入0汤圆

 楼主| 发表于 2007-3-22 21:26:06 | 显示全部楼层
哈哈,现谢了!

出0入0汤圆

发表于 2007-3-23 13:34:26 | 显示全部楼层
bozai楼主:

 PS:速度慢的原因有:模拟总线,SD卡spi模式操作(8M时,卡操作最多是4Mbps,就是500KB/s,加上命令等所以卡操作的速度本来就慢,加上模拟总线就更慢了)    

答:我的硬件:M64 + RAM62256 +74HC573 + D12 +MMC卡(D12采用总线),不是模拟总线。D12速度一般可达多少?



2、HT7130驱动电流好像只有30ma吧,因为SD卡消耗的电流差不多就有这个数了。再加上芯片LED的消耗,估计HT7130受不了。闪烁的原因就是在写卡时SD卡电流猛增造成电压下降,另外程序是每接受到一个扇区数据就写一个扇区,然后再接受数据,这就造成卡式非连续写的,因此闪烁。

答:笔误,是HT7133,手册上是只有30ma(之前做过vs1003b+M32+65K色1.5寸彩屏,60mA都没问题),看来得买个HT7333(250mA)了。



 另外做mp3时,一个马来的朋友已经向我报告SD_MMC驱动MMC卡不能用。所以应该是使用MMC卡的问题。主要我没有MMC卡所以就没办法测试了。

答:MMC驱动应该没问题,做MP3(vs1003b+M32+65K色128x128LCD)时验证过。



昨日,发现原先只有10%的机率USB枚举OK的问题是USB延长线接触不良,真晕倒!

出0入0汤圆

 楼主| 发表于 2007-3-23 15:26:56 | 显示全部楼层
回38楼:

这个系统主要的速度瓶颈在SD卡这方面,因为其采用spi方式通信,而且还有好多命令处理。所以速度慢。

我以前用D12+IDE时速度是读800KB/s 写700KB/s. 有位高人最高做到过读900KB/s的速度。

这也差不多是D12的极限了。



既然驱动MMC卡没问题的话我就不清楚问题出在哪了,因为卡读写的LBA地址都是从USB数据包里提取出来的,如果出错的话应该是普片出错而不应该是偶尔出错。并且程序中也没有特别针对哪个LBA地址作处理。总之我用的好好的,里面放满了歌曲没有发现那首歌造破坏。



PS:延长线接触不良的问题我也碰到过,当时还以为程序写的有问题,时序没搞好。

出0入0汤圆

发表于 2007-3-24 14:20:28 | 显示全部楼层
有个问题不懂,D12的SUSPEND为什么用一个10K电阻上拉啦,那且不是一直处于高电平,挂起状态吗?

出0入0汤圆

发表于 2007-3-24 14:35:02 | 显示全部楼层
郁闷,我邮购了一个M8,没注意型号,是ATMEGA8-16PU的,不能工作在3.3V,好像不能用来做这个读卡器

出0入0汤圆

 楼主| 发表于 2007-3-24 15:13:12 | 显示全部楼层
别人这么接所以我也就这么接的。看了下手册这个脚通常是作为输出的,而且是开路输出,所以要加上拉电阻。他通常取控制一个恢复电路高知单片机该工作了。具体我也不大清楚。

这个功能我没有用了,所以的单片机是一直在工作。



PS:ATmeg8-16PU手册要求不能在3.3v下工作实际上大部分都能在3v以上工作的。可以试试。

出0入0汤圆

发表于 2007-3-24 15:56:43 | 显示全部楼层
呵呵,刚有项目把数据存到SD卡内,再从USB读出文,象是度身订做,正好用上,多谢!

出0入0汤圆

发表于 2007-3-24 16:48:14 | 显示全部楼层
谢谢BOZAI,我试试看

出0入0汤圆

发表于 2007-3-27 17:18:27 | 显示全部楼层
楼主:

      看了MMC_SD.C 这个程序,

        有一点疑问,

        读 READ_BL_LEN 值

        275行.        i = buffer[6]&0x0f;  

        我看了CSD 寄存器的描述,好像是第 5个BYTE存的才是 READ_BL_LEN的值

        因为我手里没有详细的SD卡的规范,所以楼主有空确认一下

出0入0汤圆

 楼主| 发表于 2007-3-27 19:42:54 | 显示全部楼层
的确错了,应该是buffer[5]。谢谢!

一开始我改成5,反而程序不对了,在windows下看多出1.7G的空间。程序应该有一个地方也错了,只不过因为碰巧计算出了正确的结果。

经过检查错误如下:

/*********************************/

//        C_SIZE

        i = buffer[6]&0x03;

        i<<=8;

        i += buffer[7];

        i<<=2;

        i += ((buffer[8]&0xc0)>>6);



/**********************************/

//  C_SIZE_MULT



        r1 = buffer[9]&0x03;

        r1<<=2;                     //这里有错,应该是r1<<=1, 总共是3个bits

        r1 += ((buffer[10]&0x80)>>7);





/**********************************/

// BLOCKNR



        r1+=2;



        temp = 1;

        while(r1)

        {

                temp*=2;

                r1--;

        }

       

        Capacity = ((uint32)(i+1))*((uint32)temp);



/////////////////////////

// READ_BL_LEN



        i = buffer[6]&0x0f;     //这里有错,应该是buffer[5]。有可能正好算出了真确的结果



/*************************/

//BLOCK_LEN



        temp = 1;

        while(i)

        {

                temp*=2;

                i--;

        }

/************************/





/************** formula of the capacity ******************/

//

//  memory capacity = BLOCKNR * BLOCK_LEN

//       

//        BLOCKNR = (C_SIZE + 1)* MULT

//

//           C_SIZE_MULT+2

//        MULT = 2

//

//               READ_BL_LEN

//        BLOCK_LEN = 2

/**********************************************/



//The final result

       

        Capacity *= (uint32)temp;         

        return Capacity;       



哈哈,我是瞎猫碰上死耗子了!



谢谢fogee        ,下了的朋友自己改一下。

或者下一下这个,

点击此处下载armok01148323.zip

斑竹看到的话帮忙把上面的改掉,谢谢!

出0入0汤圆

发表于 2007-3-27 21:24:50 | 显示全部楼层
我看的很慢的,

上班空的时候看看,

因为最近MAXIM 的 micon 专辑上有介绍 SD卡SPI的操作方式,和你的对了对,发现一点点不同,呵呵

出0入0汤圆

发表于 2007-3-27 21:35:03 | 显示全部楼层
还有,我看好像程序里面没有CRC校验

如果用到实际的应用中的话,CRC还是需要的比较好吧.

出0入0汤圆

 楼主| 发表于 2007-3-28 09:11:13 | 显示全部楼层
是的,不过加上crc速度会受很大影响的,我没做过crc,所以就没加了。看了些别人的资料有的有,有的没有。

另外spi时序应该没问题吧,我是按照规范里的时序操作的,不过有的地方为了安全多加了些没用的用于延时的操作。别人的程序也看了,基本上也是这个模式。

可以提出来,看看那些地方不一样,也让我学学。

谢谢!

出0入0汤圆

发表于 2007-3-28 11:04:40 | 显示全部楼层
真不知道这样的高手就怎样练出来的

呵呵!

出0入0汤圆

发表于 2007-3-28 11:05:35 | 显示全部楼层
嗯,SPI时序应该没有问题,

关于CRC,有空的话还是要看看的

我说的和你不同的地方就是你现在修正的地方,呵呵!



关于速度,SPI大概只能到这个速度了

如果想要速度快的话,要用SD协议了

出0入0汤圆

 楼主| 发表于 2007-3-28 11:15:32 | 显示全部楼层
哦,明白了,再次谢谢fogee。



50楼gugou:

相比别人还有很长的路呢。

出0入0汤圆

发表于 2007-3-28 13:22:07 | 显示全部楼层
焊的很有耐心啊。佩服!

出0入0汤圆

发表于 2007-3-28 13:22:13 | 显示全部楼层
波仔 太强了 ~!

出0入0汤圆

发表于 2007-4-3 19:46:26 | 显示全部楼层
TO

bozai 章其波



板子做回来了, 不过最近忽然忙起来了,这个要暂时放一段时间了



把你的地址email给我,我寄一块板子给你



还有,我从阿莫那里买的并口isp坏了,烧不了程序,

等我有空了去弄个244换上去看看,不知道能不能修好 .





我的email  foxzhong@gmail.com

出0入0汤圆

 楼主| 发表于 2007-4-3 20:22:42 | 显示全部楼层
多谢,多谢!

板子过来我先试一下。

地址已经email给你了。

出0入0汤圆

发表于 2007-4-4 12:50:54 | 显示全部楼层
羡慕中

出0入0汤圆

发表于 2007-4-6 13:10:43 | 显示全部楼层
电源稳压换了个HT7533(果然稳定多),晶振也更换成12.288M。咳! 还是慢呀,读270k,写151k。我加上k9k1g08了,读写测试没问题,但页写512字节需缓冲512*32=16k, 真麻烦!

出0入0汤圆

 楼主| 发表于 2007-4-6 13:22:41 | 显示全部楼层
你这样,USB大部分写数据基本上都是一次写64KB的,但不全是。这样的话你可以等16K满了再一次性写到NAND上,当然程序可能稍微麻烦点,要判断块的边界。

坦子里有人不是做到过读600KB 写400KB的速度吗,优化优化程序能实现的。

出0入0汤圆

发表于 2007-4-6 14:01:48 | 显示全部楼层
很牛阿,谢谢楼主啊。

出0入0汤圆

发表于 2007-4-7 13:03:26 | 显示全部楼层
楼主, 如何枚举两个盘(准备1个用于SD/MMC卡, 1个用于NAND FLASH k9k1g08)。我优化了程序,目前MMC卡读330kb/s, 写165kb/s,能否提示一下如何优化?

出0入0汤圆

发表于 2007-4-7 13:54:40 | 显示全部楼层
弱弱的问:D12是什么功能的芯片?

出0入0汤圆

 楼主| 发表于 2007-4-7 22:09:32 | 显示全部楼层
回【62楼】fox wolf 猩猩:

D12是USB1.1 device 接口芯片



回【61楼】weiqs 不懂:

我想是通过设置MAX LUN来设置不同的盘,不知道行不行,还是需要设置两个接口之类的。

具体没做过,所以就不清楚了。

关于MAT LUN在usb mass storage协议里有的。在我的程序中是在D12_Int.c文件中

在void D12Ep0IntProc()函数里

if(SetupPacket[0] == 0xa1 && SetupPacket[1] == 0xfe)

{

D12_Write_Endpoint(1,&i,1);

}

的这一段函数,其中0xa1 0xfe就是用于判断这个请求的,请求直接返回0,可以重新对i赋值然后发到host那边就可以了。



我曾把这个改了下,但是好像没 什么变化。不知是否还有其它地方没有注意到的。

另外在CSW包中有一个字节就是设定要访问哪个逻辑单元的(LUN)。



至于优化就是我上面提到的,16K一次性写入,还有D12的操作与存储器的操作可同时进行还有不用循环语句而是一条一条写(我程序中就是这样处理的)。

总之能少执行指令的就少执行点。

出0入0汤圆

发表于 2007-4-18 21:02:50 | 显示全部楼层
我也照做了一个,用的是M8,请问熔丝怎么设置?我已经锁死了一个

出0入0汤圆

 楼主| 发表于 2007-4-18 21:16:26 | 显示全部楼层
只要设为外接晶振就行了,用内部也可以不过慢。

出0入0汤圆

发表于 2007-4-18 22:03:19 | 显示全部楼层
to bozai:

不知道你在调试这个程序的时候遇到这样的问题没有。在某一台机子上面跑,程序一点问题也没有,但是在另一台机子上面却不行,提示安装新硬件,但装驱动的时候说安装期间错误,而用其他U盘却没有这个问题?

  不知道你遇到过没有啊??

出0入0汤圆

 楼主| 发表于 2007-4-19 08:54:45 | 显示全部楼层
有过一次,不过那是电脑资源严重不足的情况下发生的,电脑注销后就一切正常了。

这种情况应该是电路的问题,比如说布线不好造成干扰等。

有的电脑的usb口对usb信号处理的好,有的不行就会出现这种情况了。

不过我没遇到过这类情况,已经在许多台机子上试过了。

出0入0汤圆

发表于 2007-4-19 19:49:24 | 显示全部楼层
哈哈,成功了,我用的是内部8M,慢是慢了点,不过用来学USB确实不错,谢谢BOZAI!

出0入0汤圆

 楼主| 发表于 2007-4-19 20:05:52 | 显示全部楼层
hoho, 恭喜

出50入0汤圆

发表于 2007-4-20 08:56:02 | 显示全部楼层
请问楼主,你的LCD是128*64的吗?用的12点阵的字体?

出0入0汤圆

 楼主| 发表于 2007-4-20 09:52:50 | 显示全部楼层
“你的LCD是128*64的吗?”

是的,KS0108兼容的



“用的12点阵的字体?”

是的



如果你要找这个字库的制作方法,可以搜索本坛,以“字库”为关键词,或搜索我的帖子。

如果要找LCD的程序,这里是一搜一大堆。

出0入0汤圆

发表于 2007-4-20 12:51:44 | 显示全部楼层
JIHAO

出0入0汤圆

发表于 2007-4-25 22:41:02 | 显示全部楼层
to bozai:



最近在看bulk only的协议,我有一点不太明白,CBW后面的命令 到底是用哪一个协议呢?SCSI?UFI?RBC? 还是其它啊?

出0入0汤圆

发表于 2007-4-26 10:12:34 | 显示全部楼层
还有那个mode sense/mode select(6)(10) 我都在协议里面没有看见它们返回命令的格式。应该是一个什么样子的啊??

出0入0汤圆

 楼主| 发表于 2007-4-26 12:32:11 | 显示全部楼层
我的程序用的是SCSI

在程序这里处理

{

USB_Interface_Descriptor_Size,

USB_Interface_Descriptor_Type,

0,

0,

Endpoint_Count,

UsbClassMassStorage,

UsbSubClassScsi,

UsbProtocolBulk,

0

},//接口描述符 interface discriptor



我对这段也比较乱,UFI应该是SCSI的一个子集



程序中只用到了几个命令,你说的mode sense/mode select(6)(10)用不到的

只用到read10(0x28) write10(0x2A) TestUnitReady(0x00) RequestSense(0x03) Read_Capacity(0x25),其它的全部返回错误就可以了。

出0入0汤圆

发表于 2007-5-23 16:54:04 | 显示全部楼层
再次请教bozai,先前仿制过你的SDMP3,成功的。

但这次仿制这个读卡器,有很奇怪的现象:没有插SD卡的时候,单片机会工作(从设置的状态灯可以看到);但一插上SD卡,单片机就不再工作了,如果是上电前就插上的话,刚程序开始设置的状态灯都不会亮;如果是上电后再插上的话,单片机工作到哪里就在哪里暂停下来,这时再拔出的话,单片机就从那里又往下执行了。

查了插卡和没插卡时各个引脚短路情况,都是良好的。也不是USB口供电问题,因为我另外接电进去也是一样的现象。SD卡封装没有错,因为我先前仿制那个SDMP3是一样的,连线也查过,没有错。

有可能是哪里的问题呢?请各位不惜指教一下。谢谢!

出0入0汤圆

 楼主| 发表于 2007-5-23 18:16:46 | 显示全部楼层
程序在处理的时候是这样的

如果卡初始化失败则不会打开D12的内部上拉,PC机就不会检测到设备的存在。

如果初始化成功则会工作。



卡的初始化在主程序中重试100次,如果有的卡不工作的话可以把重试次数增加。



如果是用除m168以外的芯片的话,程序可能要重新编译一次。当然芯片型号要改一下。68楼的兄弟用m8做成功了。



程序和硬件电路是对的,只要接线没问题,芯片和卡是好的就应该可以工作的。

出0入0汤圆

发表于 2007-5-23 21:43:23 | 显示全部楼层
谢谢bozai的回答。我是使用m8L的,一开始使用m8,没插卡居然就过去了,在电脑上已经检测到有盘插入了,当然会发生错误;但一插卡,单片机就一点动静都没有。我自己设了一些状态灯进去,但只要一插卡,状态灯就完全没有作用,因为单片机好像就没有动一样;后面换了m8L,就没有那种没插卡就可以过去的现象,但一插卡,单片机没有动静的现象依然。程序是重新编译过的,硬件是跟bazai一样的,还画了PCB,芯片从M8的表现来看是OK的,卡更是拿读卡器验证过的。现在是想检查不知道从何下手呀

出0入0汤圆

 楼主| 发表于 2007-5-23 22:05:13 | 显示全部楼层
你可以按照77楼的办法,增加重试次数试试。还有就是把时钟设成更低的频率试试。

如果有条件的话可以另找一张SD卡试试。

如果还不行的话要查查硬件了。



目前发现这个读卡器发现不能读一张很老的SD卡,这张卡是老师那的,我不好测试。

不过那张卡可以在我的mp3上工作



最早做mp3的时候发现卡可以在m8低时钟时工作,但时钟变高了就不可以了。

本以为是卡的问题,后来看到坛子里的兄弟说是卡初始化要时间,因此需要多初始化几次。



后来改了果然不错,我程序中是做100次重试,但是这个还是不能读老师的 那张卡(SAMSUNG)。初始化还是不成功。

因为卡不在我这,我也不清楚是不是100次重试次数不够造成的。

但是我用的四五张卡都是可以的。



另外还有一点,这个读卡器没有做成那种专门的读卡器,对卡的插入做出反应。

也就是说插到电脑之前卡应该插上。



至于你没才插卡也可以过的情况,因该是spi口悬空造成误判,加个上拉就可以了。其实spi是不需要上拉的。



如果你的PCB有剩余,方便的话可否送我一块。上面的fogee兄弟后来没回应了,没有收到PCB。

出0入0汤圆

发表于 2007-5-28 16:42:04 | 显示全部楼层
今天才看到,最近忙其他的去了,没有时间搞自己的东西。

果然是时钟的问题,而且m8后面的后缀不同也会有影响。我把晶振频率降下来就行了,20M居然不行。

PCB还是有的,你留下联系方式,我好寄给你。不方便发在这的话,可以发到我的邮箱:hakkaman@sohu.com.

出0入0汤圆

 楼主| 发表于 2007-5-28 16:44:37 | 显示全部楼层
谢谢了!我邮件联系你。

出0入0汤圆

 楼主| 发表于 2007-5-28 16:53:59 | 显示全部楼层
另外用20M的时候你把CKOPT这个镕丝位选上试试,看看这样会不会好一点。

出0入0汤圆

发表于 2007-5-28 17:03:41 | 显示全部楼层
不错的东东阿,决定仿制一个玩玩,刚好最近在研究 avr

出0入0汤圆

发表于 2007-6-1 14:32:29 | 显示全部楼层
谢谢bozai,不过我试过8m、12m、16m、18.xm的,16m以上就不太稳了。ckopt这个熔丝位会加大功耗,应该对时钟有一定的好处。等下次做板再去试吧。

出0入0汤圆

 楼主| 发表于 2007-6-1 16:05:56 | 显示全部楼层
谢谢你的板子啊!

我这边D12的封装是那种更小的封装,没法焊,所以暂时还没有测试,不过要这小芯片工作在20M的确难为它了。不过我之前做的mp3曾经用20M试过,可能那块芯片比较好吧。

再次感谢!

出0入0汤圆

发表于 2007-7-27 15:15:53 | 显示全部楼层
我改动了硬件,怎么不行?

改动如下:D12数据线接M16的A口;

         D12_CS       PC5;

         D12_INT      PC4;

         D12_WR       PC3;

         D12_RD       PC2;

         D12_A0       PC1;

           SD_CS      PB4;

           SD_SI      PB6;

           SD_SCLK    PB7;

           SD_SO      PB5;

其它电路没有改变,SD为1G,问题出在哪????????

出0入0汤圆

发表于 2007-7-27 16:22:12 | 显示全部楼层
谢谢共享!

出0入0汤圆

发表于 2007-7-28 16:02:48 | 显示全部楼层
程序只改了这部分:

#define D12_DATA_PORT_DDR DDRA   //DDRD

#define D12_DATA_PORT     PORTA  //PORTD

#define D12_DATA_PIN      PINA   //PIND



#define MMC_SD_PORT       PORTB                    //引脚定义

#define MMC_SD_CS_PIN     4

//#define MMC_SD_CS_PIN     2                       //mega8

#define DDR_INI() DDRB |=_BV(4)|_BV(5)|_BV(7)

//#define DDR_INI() DDRB |= _BV(2)|_BV(3)|_BV(5)    //mega8

出0入0汤圆

 楼主| 发表于 2007-7-28 18:15:18 | 显示全部楼层
不好意思,好久不来了。

从你发的回帖内容看,你不是用mega8

你使用的应该是mega16及以上的芯片,并且你使用了PORTC端口,那么首先请问JTAG是否关掉?

如果关掉了,那么请检查线路,确保硬件没问题。



软件只修改这些代码是不会出现问题的,至少从目前我知道是没问题的。

出0入0汤圆

发表于 2007-7-30 11:54:10 | 显示全部楼层
我是用ISP下载的,JTAG已经关掉了,但是还是不行.

出0入0汤圆

 楼主| 发表于 2007-7-30 19:11:21 | 显示全部楼层
我看了一下程序,只要改头文件中的管教定义就可以了,你这样做没有问题。



调整一下AVR的工作时钟吧,用内部1M 试试,如果还是不行可能就是硬件问题了。

你可以加几个LED改一下程序调试试试。

出0入0汤圆

发表于 2007-8-13 11:28:29 | 显示全部楼层
顶了 谢谢分享

出0入0汤圆

发表于 2007-12-8 07:49:53 | 显示全部楼层
呵呵~老帖子又被我翻出来了~照着bozai的电路用试验班搭了一个环境,一次成功啦~
  我是用Atmega168 + 3.6863MHz晶振+1G Kingstone SD做的~
  最麻烦的就是PDIUSBD12 的焊接了~我用了最细的线焊接都不行,没办法,把细导线拆开,发现它由6~-7根细的像头发丝的线组成的~
用这些线一根根焊到D12上,完了用胶枪封了一下~
  哈哈~这下可以钻研USB通信了~ 谢谢BOZAI~
  
  正面:

  背面:

出0入0汤圆

发表于 2007-12-8 08:54:24 | 显示全部楼层
在其它论坛上看到过,原来这里是原版呀。收藏!

出0入0汤圆

发表于 2007-12-8 10:22:53 | 显示全部楼层
下次试试

出0入0汤圆

发表于 2007-12-22 20:08:22 | 显示全部楼层
强~今天对比了一下bozai的源码和周立功的D12源码,bozai的做了较大幅度的改动(尤其是CHAP_9.c)~感觉移植工作其实对使用者来说就是在几个端点的中断事件中处理自己要做的事情就好了~ bozai为什么没有按照周立功的那种方式做呢?
  另外不知道调试枚举这一部分的时候,是怎么样来调试的? bushound5.0我也下载了~不知道该怎么一步步分析枚举的过程~

  在接口描述符 interface discriptor中把设备定义为了scsi设备,这样在xp下不需要驱动麽?那如果在win2000下怎么办?
  还有太多部分不明白~也没有人可以问~

出0入0汤圆

发表于 2007-12-22 20:22:19 | 显示全部楼层
强啊!!!来三个感叹号!

出0入0汤圆

发表于 2007-12-22 20:26:02 | 显示全部楼层
记号

出0入0汤圆

发表于 2007-12-23 16:03:20 | 显示全部楼层
楼主高!实在是高!

出0入0汤圆

 楼主| 发表于 2007-12-23 18:05:43 | 显示全部楼层
to 【96楼】 soulmate
    呵呵,我这代码不是参照周立功的,是我买的一块公版44b0x上的,我只是对那些文件,函数作了处理。然后在那个基础上加了mass storage部分的代码,这些代码也参考了很多例子(有些程序在我看来都是错的,但是不知道它是如何正常工作的),看了很错usb资料弄出来的。

    你所说的枚举部分的调试,这个只有通过串口来调,通过打印收来的包数据等信息。

PS: 后来usb也就没有再做下去(主要不会写上位机软件),所以对这一块也不是很熟。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 16:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表