一种sd数据读取/写入出错处理方法及sd主机、sd设备的制造方法_3

文档序号:9865436阅读:来源:国知局
。当所述计数器的值大于所述最大重传次数寄存器的值时,通知SD驱动程序进行处理。当SD设备I检测到读取/写入的数据块不存在CRC错误时,所述SD设备I中的计数器自动执行清零操作。在一个实施例中,所述SD设备I中的最大重传次数寄存器的值通过软件设置。
[0060]本发明还提供一种SD主机。在一个实施例中,如图4所示,所述SD主机2包括:标识主机重传寄存器21,用于标识所述SD主机是否具备数据重传功能。使能主机重传寄存器22,用于使能所述SD主机2的数据重传功能。所述SD主机可以完全由硬件电路实现其数据重传功能。
[0061]如果所述SD主机2具备自动重传功能且所述自动重传功能使能,则当SD主机2读取数据块并进行CRC检测后,将所述CRC检测结果发送给所读取的SD设备I ;当所述SD主机2检测到读取/写入的数据块存在CRC错误时,所述SD主机2自动重新读取/写入所述存在CRC错误的数据块。
[0062]在一个实施例中,在SD主机2的寄存器空间里,分别选择两个官方协议中没有利用的寄存器比特位来表明SD主机2是否具有自动重传数据功能和是否使能自动重传功能,即SD主机2中选择某寄存地址的两个比特,一个比特表示主机是否有能力自动重传,即代表标识主机重传寄存器21。一个比特表示是否使能自动重传功能,即代表使能主机重传寄存器22。在一个实施例中,SD主机2选择的寄存器为地址0x47的第8个比特来表示SD主机2是否具备自动重传功能,如果为I,表示有自动重传功能,如果为0,表示没有自动重传功能,这个比特位为软件只读寄存器位。在一个实施例中,SD主机2选择的寄存器为地址0x47的第7个比特来表示SD主机2是否使能自动重传功能,如果为I,表示使能自动重传功能,如果为0,表示不使能自动重传功能,这个比特位为软件可读可写寄存器位。
[0063]当SD设备I插入SD主机2的时候,SD主机2的驱动程序首先读取相应的SD主机寄存器来判断SD主机2是否具有自动重传功能,然后再读取SD设备I相应的寄存器来判断SD设备I是否具有自动重传功能,如果都具备自动重传功能,那么主机驱动程序同时使能主机和设备的自动重传机制,即给使能设备重传寄存器12以及使能主机重传寄存器22赋值,使能SD设备I和SD主机2的自动重传功能。这样SD主机和SD设备之间就建立了数据传输错误时候的自动重传机制。
[0064]在一个实施例中,SD主机2向SD设备I写入数据时的自动重传机制包括:SD主机2向SD设备I写入数据的过程中,每写完一个数据块(block),SD设备I都会进行CRC检测,并且SD设备I会回复一个8位的检测结果给SD主机2,里面包含了 CRC正确或者错误的信息。当SD主机2收到检测结果的时候,就会分析SD设备I返回的结果,如果发现了CRC校验错误,那么SD主机2重传当前数据块。
[0065]在一个实施例中,SD主机2读取SD设备I数据时的自动重传机制包括:SD主机2在读取SD设备I数据的过程中,每读完一个块(block),SD主机2都会检测CRC。但是在当前的官方协议中,SD主机2并不会通知SD设备I当前传输数据块的CRC检测结果。所以,当SD主机2和SD设备I都使能数据重传机制之后,在SD主机2接收完一个数据块(block)之后,增加一个把CRC检测结果发送到SD设备I的过程。在一个实施例中,SD主机2回复设备一个8位的检测结果,让设备知道当前是否存在CRC错误,如果设备发现了 CRC错误,那么设备重传当前数据块。
[0066]采用上述SD主机2和SD设备I可以由SD硬件实现数据重传功能,大大提高了 SD数据传输发生CRC错误时的处理速度。在一个实施例中,只能在SD主机2和SD设备I都使能数据重传功能之后,才能增加这个SD主机2读取SD设备I时的SD主机2将CRC检测回复到SD设备I的过程,以保证该SD主机2 (或SD设备I)能够兼容市面上其他不带数据重传功能的SD设备(或SD主机)。
[0067]在一个实施例中,所述SD主机2还包括:最大重传次数寄存器,用于存储自动连续重传的最大次数。计数器,用于统计连续发生CRC错误的次数。当SD主机2检测到读取/写入的数据块存在CRC错误时,所述计数器自动执行加I操作;当所述计数器的值小于所述存储连续重传次数的寄存器的值时,所述SD主机2自动重新读取/写入所述存在CRC错误的数据块。当所述计数器的值大于所述最大重传次数寄存器的值时,中断通知SD驱动程序进行处理。当SD主机2检测到读取/写入的数据块不存在CRC错误时,所述SD主机2中的计数器自动执行清零操作。在一个实施例中,所述SD主机2中的所述最大重传次数寄存器的值通过软件设置。
[0068]在一个实施例中,在SD主机2和SD设备I的寄存器地址空间里,分别选择2比特官方协议中没有利用的寄存器来表示针对同一数据块的连续重传次数,即SD设备I和SD主机2上的最大重传次数寄存器。在使能重传机制之前,SD主机2的驱动程序首先要设置SD主机2和SD设备I的针对同一个数据块连续发生CRC错误时重传次数,即给最大重传次数寄存器赋值。在SD主机2控制器电路里,需要一个CRC错误计数器来计数连续CRC错误的次数,即计数器。每次产生CRC错误,CRC错误计数器加I,每次成功接收或发送一个数据块(没有CRC错误),CRC错误计数器清零。当错误计数器的值大于或等于连续重传次数寄存器所设定的阈值,SD主机2和SD设备I自动终止此次传输,SD主机2通过中断通知SD主机2放入驱动程序,让驱动程序决定下一步动作。具体的实施中,必须注意SD主机2和SD设备I的连续重传次数的设定必须保持一致,即对SD设备I和SD主机2上的最大重传次数寄存器设置一样的值。
[0069]在一个实施例中,所述SD主机2包括一个数据读写FIFO,用于读取或写入数据块;当SD主机2读取SD设备I数据块时,SD主机2首先把所述数据读写FIFO的当前写指针的值保存在一个临时写指针中;当读取所述数据块完成并确定所读取的数据块存在CRC错误时,把所述临时写指针的值载入到所述当前写指针中;自动重新读取所述数据块;当向SD设备I写入数据块时,SD主机2首先把所述数据读写FIFO的当前读指针的值保存在一个临时读指针中;当写入所述数据块完成并确定所写入的数据块存在CRC错误时,将所述临时读指针的值载入到所述当前读指针中;自动重新写入所述数据块。
[0070]在一个实施例中,如图5所示,在本实施例中,不仅SD主机2包括一个数据读写FIFO, SD设备I也包括一个数据读写FIFO。
[0071]SD主机2向SD设备I写入数据时,在SD主机2端,进行的是读取FIFO的操作,先把当前读指针载入到一个临时读指针里(此临时读指针与临时写指针配合,用来判断FIFO空满和FIFO里有效数据的个数)。当前数据块传输完成,并且SD设备I的CRC状态回复中没有CRC错误的时候,把新的读指针的值载入到临时读指针,表示刚才的数据发送正确。如果当前数据块传输完成,收到了 SD设备I回复的CRC状态错误,那么把临时读指针中的值载入到当前读指针中,读指针保持为读取FIFO操作之前的值。FIFO中就像刚才的数据块没有被写入一样。在SD设备I端,进行的是写入FIFO的操作,先把当前写指针载入到一个临时写指针里(此临时写指针与临时读指针配合,用来判断FIFO空满和FIFO里有效数据的个数)。当前数据块传输完成,并且SD设备I没有发现CRC错误的时候,把新的写指针的值载入到临时写指针,表示刚才收到的数据正确并且可以加以利用。如果当前数据块传输完成,SD设备I检测到CRC状态错误,那么把临时写指针中的值载入到当前写指针中,写指针保持为读取FIFO操作之前的值。SD设备I中的FIFO中就像刚才的数据块没有被写入一样。
[0072]SD主机2向SD设备I读取数据时,在SD主机2端,进行的是写入FIFO的操作,先把当前写指针载入到一个临时写指针里(此写临时指针与临时读指针配合,用来判断FIFO空满和FIFO里有效数据的个数)。当当前数据块传输完成,并且SD主机2的CRC状态检测没有CRC错误的时候,把新的写指针的值载入到临时写指针,表示刚才收到的数据正确并且可以加以利用。如果当前数据块传输完成,SD主机2的CRC状态检测发现CRC错误的时候,那么把临时写指针中的值载入到当前写指针中,写指针保持为读取FIFO操作之前的值。SD主机2中的FIFO中就像刚才的数据块没有被写入一样。在SD设备I端,进行的是读取FIFO的操作,先把当前读指针载入到一个临时读指针里(此临时读指针与临时写指针配合,用来判断FIFO空满和FIFO里有效数据的个数)。当当前数据块传输完成,并且SD主机2回复中没有CRC错误的时候,把新的读指针的值载入到临时读指针,表示刚才的数据发送正确。如果当前数据块传输完成,SD主机2回复中存在CRC状态错误,那么把临时读指针中的值载入到当前读指针中,读指针保持为读取FIFO操作之前的值。FIFO中就像刚才的数据块没有被写入一样。
[0073]综上所述,本发明的一种SD数据读取/写入错误处理方法及SD主机、SD设备,具有以下有益效果:在 SD 主机(Secure Digital
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1