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?
Konuya geç baktım. Benim de bu işle HDD BIOS'unu aynı cihazla yazınca alakam oldu; epey deneyimim olmuştu ama işte yoksa çip neye yarar yine de bakardık iyice. Hayırlı olur inşaallah.
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ş.
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ş.
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.
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.
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