Open xiuhui-wang opened 4 months ago
补充下,这个时候 FPGA 跟 STM32 下载都是正常的。。.. 状态电流也都正常 就是看起来一切都好。。。。
但是就是一直进9球
左中右三盏状态灯,中间亮了说明FPGA已运行,右边亮了说明STM运行正常,估计你现在应该左边那盏没亮,说明没和土星建立通讯,为什么没有通讯?1.一般买到的都是二手芯片164245,这个芯片是否完好?2.FPGA是全新的?或者会不会虚焊?3.那块内存是不是二手10元以下?
确保芯片完好,焊接完好就不会有你说的问题了! 还有一个注意卡槽问题!
是的 就是无法建立通信。。。。。
只亮两个灯。。。
但是其实 这个时候 依然 要怀疑 FPGA 内存跟4个芯片。。。。
无法继续定位是哪儿里的问题。。。。
以为即使是 FPGA的灯亮了。。。 也不能保证FPGA 都是好的。。。。
然后还是 需要不停的更换芯片。。。 不停的重新 BGA。。。
MCU固件有内存测试功能。配置文件写debug=40000000则开机就测试一次内存。写debug=c0000000则循环测试内存。测试结果可通过led或串口查看。 能通过测试则卡基本上没啥问题了。 然后就要确认卡槽没问题。如过你光驱工作正常,可以通过一个测试光盘来检验卡带插入后读取是否正确
以我有限的做版经验来看,自己焊接出问题的概率还是要大一点的。 我曾经贴片做了十几块板,烧录调试几乎一次就过的,除了有几片内存确实有问题的。
您的经验非常宝贵。。。 现在的解决方案 就是全部重新加焊一遍。。。。
我看您在X上发布,那种拆了卡槽的板子,怎么样,好用不? 应该能让机器体积缩小很多
我看您在X上发布,那种拆了卡槽的板子,怎么样,好用不? 应该能让机器体积缩小很多
那个是爱好者魔改版,把金手指换成过孔,再焊上排母。但为此,土星端也需要魔改,拆除卡槽加入排针,好处是确保更好的接触效果,避免在游戏中因原卡槽诟病而导致的运行错误(可解决有些游戏因接触不良、机器震动导致的错误),同时saroo端可以选择不同角度的排母改变安装角度,使saroo可以竖装或卧装
您好,我打开了 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 ?
我继续查找,看到 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,然后得到一个 时间对吧?
上面一直在循环的情况是错误的。
我继续查找,看到 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电阻待用,再来留言
您好,我已经通过测试并且解决了,楼上的方法是可行的。我想请教下哪里可以买到合格全新的内存芯片,我找不到合适的供应商。。。。
这个卡,焊接完,最恼火的就是 一直跳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