Katılım
21 Aralık 2023
Mesajlar
2.598
Çözümler
8
Beğeniler
2.464
Yer
Kaer Morhen
Anakartıma BIOS yazacağım ancak programda çipin modelini bulamadım. 1.8v adaptörü henüz kargodan gelmediği için anakarta takmayacağım.

Mevcut çip görselini bırakıyorum, ayrıca bu işlemi nasıl yapacağımı anlatırsanız sevinirim. @deadfellow

1727250550624.webp
 
Hangi servise verdiniz bilmiyorum. Her markada pin sırası farklı olduğundan çoğu servis/tamirci uğraşmak yerine BIOS'u söküp dışarıda programlamayı tercih ediyor. Ama bu işlem risklidir, yapılan işlem esnasında düşük ihtimal de olsa BIOS çipi fiziki olarak zarar görebilir. Bu da BIOS çipi içerisinde korumalı kısımlarda yer alan MAC adresi, anakart seri numarası gibi kritik bilgilerin kaybolmasına neden olabilir?

ServisPoint'e verdim ama tahminimce dediğiniz gibi oldu. Kartta hiçbir sorun yok. Bilgi için teşekkürler.
 
Bu arada CH341A çipini üreten firma CH347 adında üst modelini çıkarmış.
SPI saat hızı 60MHz'e kadar destekliyor. BIOS'ları daha hızlı yazacak artık.
SWD ve JTAG desteği gelmiş. Özellikle mikrodenetleyici programlama ve debug işleri yapanların işine yarayabilir.

İç karartan siyah PCB yerine mor PCB'ye geçmişler. CH341A'da olan çiplere 5V gitmesine sebep olan tasarım hatası düzeltilmiş.

B5HES2401140W4G8S85.webp
 
Bu arada CH341a çipini üreten firma CH347 adında üst modelini çıkarmış.
Spı saat hızı 60MHz'e kadar destekliyor. BIOS'ları daha hızlı yazacak artık.
Swd ve JTAG desteği gelmiş. Özellikle mikrodenetleyici programlama ve Debug işleri yapanların işine yarayabilir.

İç karartan siyah PCB yerine mor PCB'ye geçmişler. CH341A'da olan çiplere 5V gitmesine sebep olan tasarım hatası düzeltilmiş.

Eki Görüntüle 190286

Keşke yeni nesil çiplere uygun aparat ekleseler.
 
Konuda bahsi geçen WSON kılıf çiplerin bacakları altta olduğundan dışarıdan aparatla bağlantı yapmak mümkün değil. Ya SPI header kullanılacak ya da çip sökülecek.
 
Konuda bahsi geçen wson kılıf çiplerin bacakları altta olduğundan dışarıdan aparatla bağlantı yapmak mümkün değil. Ya spı header kullanılacak ya da çip sökülecek.

Ben dışarıda bağlantı gördüğümden ve aynı boyutlarda aparat gördüğümden mümkün olduğunu düşünmüştüm. MSI forumda ise bunun mümkün hatta denendiğini yazmışlardı.
 
Ben dışarıda bağlantı gördüğümden ve aynı boyutlarda aparat gördüğümden mümkün olduğunu düşünmüştüm. MSI forumda ise bunun mümkün hatta denendiğini yazmışlardı.
Aliexpress sitesinde bir tanesini gördüm. WSON kılıfın yapısından ötürü SOIC'lerdeki gibi çipin üzerinde kendi kendine durabilen bir çözüm biraz zor. İnce pogo pinlerle bir aparat yapmışlar. PCB üzerindeki çipin padlerinin dışarı taşan kısımlarına denk gelecek şekilde bastırılarak kullanılıyor.

61jEnbywznL.webp
 
AliExpress sitesinde bir tanesini gördüm. Wson kılıfın yapısından ötürü soıc'lerdeki gibi çipin üzerinde kendi kendine durabilen bir çözüm biraz zor. İnce pogo pinlerle bir aparat yapmışlar. PCB üzerindeki çipin padlerinin dışarı taşan kısımlarına denk gelecek şekilde bastırılarak kullanılıyor.

Eki Görüntüle 190361

Benim gördüğüm kılıf misali çipi tamamen üstüne oturup el ile sabit tutmaya gerek kalmayan türdendi. Bu da fena değil yine de.
 
Birçok flash çiplerinde çıkış gücü en düşük seviye olan %25'e ayarlanmıştır. Bu durum mandal ya da SPI header ile yapılan okumalarda kablodan kaynaklı kapasitans, sinyal zayıflaması ve SCK hattının oluşturduğu crosstalk nedeniyle hatalara neden olabilmektedir. Bu nedenle bazen çipin çıkış gücünü artırmak gerekebilmektedir. Bunun için bir script yazdım. Script önce Status Register-3'ü okur. Ardından 0x9F ile maskeleme yaparak 6. ve 7. bitleri temizler. Ardından bu bitlere seçtiğimiz çıkış gücüne uygun değerleri yazarak Flash'a gönderir. Güvenlik nedeniyle geçici yazma komutu kullanılmıştır. Çipin enerjisi kesildiğinde işlemden önceki eski ayarlarına geri döner.

(Normalde AsProgrammer ve NeoProgrammer içerisinden status register'lara erişip değişiklik yapabilirsiniz. Ancak bu yazılımların dahili işlevleri kalıcı yazma komutu ile işlem yapıyor. İşlem kalıcı olduğu için geri alamama riski var. Bu nedenle özel script yazdım. )

Bu kodu kopyalayıp asporogrammer'in scripts klasörü içerisine .pas uzantısı ile kaydedin. Ardından Asprogrammer içerisinden script editörü açın. File > Open menüsünden kaydettiğiniz script dosyasını seçin. Section menüsünden ayarlamak istediğiniz çıkış gücünü seçip, Execute'e tıklayın. Ardından script editörü kapatın. Ardından araç çubuğundaki Read SREG düğmesi ile status register'ları okuyarak kontrol sağlayabilirsiniz. Status Register-3'te:
%100 için X00xxxxx,
%75 için X01xxxxx,
%50 için X10xxxxx,
%25 için X11xxxxx değeri görmeniz lazım.
X'ler çipin mevcut ayarlarına göre değişiklik gösterebilir, 0'a da 1 olabilir.

Kod:
{$100}
begin.
 if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
 sreg := 0;
 SPIWrite(0, 1, $15);
 SPIRead(1, 1,sreg);

 sreg_temp := (sreg and $9F) or $00;

 SPIWrite(1, 1, $50);
 SPIWrite(1, 2, $11,sreg_temp);
 //Busy?
 repeat.
 SPIWrite(0, 1, $05);
 SPIRead(1, 1, sreg);
 until((sreg and 1) <> 1);
 ProgressBar(1);

 ProgressBar(0, 0, 0);
 SPIExitProgMode();

end.

{$75}
begin.
 if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
 sreg := 0;
 SPIWrite(0, 1, $15);
 SPIRead(1, 1,sreg);

 sreg_temp := (sreg and $9F) or $20;

 SPIWrite(1, 1, $50);
 SPIWrite(1, 2, $11,sreg_temp);
 //Busy?
 repeat.
 SPIWrite(0, 1, $05);
 SPIRead(1, 1, sreg);
 until((sreg and 1) <> 1);
 ProgressBar(1);

 ProgressBar(0, 0, 0);
 SPIExitProgMode();

end.

{$50}
begin.
 if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
 sreg := 0;
 SPIWrite(0, 1, $15);
 SPIRead(1, 1,sreg);

 sreg_temp := (sreg and $9F) or $40;

 SPIWrite(1, 1, $50);
 SPIWrite(1, 2, $11,sreg_temp);
 //Busy?
 repeat.
 SPIWrite(0, 1, $05);
 SPIRead(1, 1, sreg);
 until((sreg and 1) <> 1);
 ProgressBar(1);

 ProgressBar(0, 0, 0);
 SPIExitProgMode();

end.

{$25}
begin.
 if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
 sreg := 0;
 SPIWrite(0, 1, $15);
 SPIRead(1, 1,sreg);

 sreg_temp := (sreg and $9F) or $60;

 SPIWrite(1, 1, $50);
 SPIWrite(1, 2, $11,sreg_temp);
 //Busy?
 repeat.
 SPIWrite(0, 1, $05);
 SPIRead(1, 1, sreg);
 until((sreg and 1) <> 1);
 ProgressBar(1);

 ProgressBar(0, 0, 0);
 SPIExitProgMode();

end
 
Son düzenleme: