tpunix / SAROO

SAROO is a SEGA Saturn HDloader
293 stars 37 forks source link

有什么快速的办法,DEBUG硬件出了什么问题么? #79

Open xiuhui-wang opened 4 months ago

xiuhui-wang commented 4 months ago

这个卡,焊接完,最恼火的就是 一直跳9球,而没有任何提示,这种情况就是串口日志一起正常,也能读到游戏数量,然后就一直9球了,定位不到是哪里的问题,只能不停的怀疑。。。。

希望得到一些经验,我有的时候甚至2天都做不出一张卡。。。。。

SSMaster start! 20240217

SDCARD insert! CMD_08: retv=00000000 resp0=000001aa V2.0: Yes SDHC: Yes Name: NCard Blen: 512 Blks: 30881792 Size: 15440896 K CMD_07: resp=00000700 CMD_16: resp=00000900 ACMD06: resp=00000920 CMD13: resp=00000900 Mount SDFS: 00000000

FPGA config done! FPGA state: config done: 1 init done: 1 status: 1

Load config [/saroocfg.txt] for [Global] Global config: lang_id = 0 exmem_4M

Found Saturn bootrom file. Size 00060000 f_read: retv=0 rv=00060000

stm32> {00}Total discs: 1

xiuhui-wang commented 4 months ago

补充下,这个时候 FPGA 跟 STM32 下载都是正常的。。.. 状态电流也都正常 就是看起来一切都好。。。。

但是就是一直进9球

tzmwx commented 4 months ago

左中右三盏状态灯,中间亮了说明FPGA已运行,右边亮了说明STM运行正常,估计你现在应该左边那盏没亮,说明没和土星建立通讯,为什么没有通讯?1.一般买到的都是二手芯片164245,这个芯片是否完好?2.FPGA是全新的?或者会不会虚焊?3.那块内存是不是二手10元以下?

确保芯片完好,焊接完好就不会有你说的问题了! 还有一个注意卡槽问题!

xiuhui-wang commented 4 months ago

是的 就是无法建立通信。。。。。 只亮两个灯。。。 但是其实 这个时候 依然 要怀疑 FPGA 内存跟4个芯片。。。。 无法继续定位是哪儿里的问题。。。。
以为即使是 FPGA的灯亮了。。。 也不能保证FPGA 都是好的。。。。

然后还是 需要不停的更换芯片。。。 不停的重新 BGA。。。

tpunix commented 4 months ago

MCU固件有内存测试功能。配置文件写debug=40000000则开机就测试一次内存。写debug=c0000000则循环测试内存。测试结果可通过led或串口查看。 能通过测试则卡基本上没啥问题了。 然后就要确认卡槽没问题。如过你光驱工作正常,可以通过一个测试光盘来检验卡带插入后读取是否正确

tpunix commented 4 months ago

以我有限的做版经验来看,自己焊接出问题的概率还是要大一点的。 我曾经贴片做了十几块板,烧录调试几乎一次就过的,除了有几片内存确实有问题的。

xiuhui-wang commented 4 months ago

您的经验非常宝贵。。。 现在的解决方案 就是全部重新加焊一遍。。。。

我看您在X上发布,那种拆了卡槽的板子,怎么样,好用不? 应该能让机器体积缩小很多

tzmwx commented 4 months ago

我看您在X上发布,那种拆了卡槽的板子,怎么样,好用不? 应该能让机器体积缩小很多

那个是爱好者魔改版,把金手指换成过孔,再焊上排母。但为此,土星端也需要魔改,拆除卡槽加入排针,好处是确保更好的接触效果,避免在游戏中因原卡槽诟病而导致的运行错误(可解决有些游戏因接触不良、机器震动导致的错误),同时saroo端可以选择不同角度的排母改变安装角度,使saroo可以竖装或卧装

xiuhui-wang commented 1 month ago

您好,我打开了 debug=40000000 这个选项

然后我会得到,

Mismatch0 at 617a53c2! read=000047e5 calc=0000b53c

Mismatch0 at 617a53c0! read=000047e5 calc=0000b53a

Mismatch0 at 617a53be! read=000047cd calc=0000b538

Mismatch0 at 617a53bc! read=000047cd calc=0000b536

Mismatch0 at 617a53ba! read=000047cd calc=0000b534

Mismatch0 at 617a53b8! read=000047cd calc=0000b532

Mismatch0 at 617a53b6! read=000047d5 calc=0000b530

Mismatch0 at 617a53b4! read=000047d5 calc=0000b52e

Mismatch0 at 617a53b2! read=000047d5 calc=0000b52c

Mismatch0 at 617a53b0! read=000047d5 calc=0000b52a

类似这样的信息,它是一直循环的 不会停止。 我想知道这样是正确的或者是错误的?

我查看了 源码:

int mem_test(u32 addr, int size) { u16 rd, sum; int i, ecnt=0;

printk("Memory test at %08x ...", addr);

size /= 2;
for(i=0; i<size; i++){
    *(u16*)(addr) = mksum(addr);
    addr += 2;
}

for(i=0; i<size; i++){
    addr -= 2;
    sum = mksum(addr);
    rd  = *(u16*)(addr);
    if(sum!=rd){
        printk("\nMismatch0 at %08x! read=%08x calc=%08x\n", addr, rd, sum);
        ecnt += 1;
    }
    *(u16*)(addr) = ~sum;

}

for(i=0; i<size; i++){
    sum = ~mksum(addr);
    rd  = *(u16*)(addr);
    if(sum!=rd){
        printk("\nMismatch2 at %08x! read=%08x calc=%08x\n", addr, rd, sum);
        ecnt += 1;
    }
    addr += 2;
}

if(ecnt==0)
    printk("    OK!\n\n");

return ecnt;

}

是不是我最后应该得到一个 OK ?

xiuhui-wang commented 1 month ago

我继续查找,看到 if(debug_flags&0xc0000000){ led_event(LEDEV_BUSY); int cnt = 0; while(1){ retv = mem_test(0x61000000, 0x00800000); if(retv){ led_event(LEDEV_SDRAM_ERROR); //return; } if((debug_flags&0x40000000)==0) break; cnt += 1; printk(" times: %d\n", cnt); } led_event(LEDEV_NONE); }

其实 就是 我测试如果通过的内存,它会BREAK,然后得到一个 时间对吧?

上面一直在循环的情况是错误的。

tzmwx commented 1 month ago

我继续查找,看到 if(debug_flags&0xc0000000){ led_event(LEDEV_BUSY); int cnt = 0; while(1){ retv = mem_test(0x61000000, 0x00800000); if(retv){ led_event(LEDEV_SDRAM_ERROR); //return; } if((debug_flags&0x40000000)==0) break; cnt += 1; printk(" times: %d\n", cnt); } led_event(LEDEV_NONE); }

其实 就是 我测试如果通过的内存,它会BREAK,然后得到一个 时间对吧?

上面一直在循环的情况是错误的。

应该是内存反馈错误了 贴一下你卡带的正反面照片看看

另外: 你改挂debug=c0000000则循环测试内存 不用上土星,直接给卡5v电源即可 看串口记录或mcu的led如何闪烁 串口应该如图反馈ok led闪烁按1秒

如果串口还像你之前发的mismatch就要查内存或fpga及焊接问题了 如果led每秒3次闪烁也要如上处理

有信息反馈,或准备一个4.7K-10K电阻待用,再来留言 IMG_5676

xiuhui-wang commented 1 month ago

您好,我已经通过测试并且解决了,楼上的方法是可行的。我想请教下哪里可以买到合格全新的内存芯片,我找不到合适的供应商。。。。