仿真時發(fā)現(xiàn),不加延時連續(xù)讀兩個扇區(qū),第二個扇區(qū)就會讀錯 必須要加延時么?
連續(xù)讀扇區(qū)的時候不需要加延時的 你把仿真器去掉試試
試了下 仿真器去掉也還是一樣 如下程序
mmcReadSector(BIOS_PARAMETER_BLOCK,buff); CH375_DelayNus(30); // 添加的延時 if(buff[0] != 0xEB) //this is mbr { VBRadd = buff[0x1C6] + (buff[0x1C7] << 8); } else { VBRadd = 0; } mmcReadSector(VBRadd,buff); CH375_DelayNus(30); // 添加的延時
bootp=(struct BootSec *)buff;
上面如果去掉那兩端延時的話 buff 中接收到的數(shù)據(jù)就不會 加了延時,一切正常,很奇怪 。。。
延時是不需要的,你讀取的第一個扇區(qū)的數(shù)據(jù)是正確的嗎?還有在你讀取第2個扇區(qū)的時候,如果出錯,會是什么樣的錯誤,同時你還需要去看下在你的三個讀寫子函數(shù)里面的延時是否夠,按照我們的CH375操作時序,命令與命令之間的延時是2US,數(shù)據(jù)與命令,數(shù)據(jù)與數(shù)據(jù)之間的延時是1US。
讀取第一個扇區(qū)的數(shù)據(jù)是對的 不加延時讀取第二個扇區(qū),讀出來的數(shù)據(jù)還是第一個扇區(qū)里面的數(shù)據(jù)