RTC'yi geçerli saate yapılandırmak için ST-LINK Yardımcı Programını Kullanma


9

Ne yapıyordum

Bir STM32 mikrodenetleyici kullanıyorum ve projem için günün belirli saatlerinde veri gönderebilmeliyim (11:00 ve 14:00). Mikrodenetleyici bunu başarmadan önce saatin kaç olduğunu bilmeli. Ne yazık ki, sadece tek yönlü bir iletişim var ve bu nedenle ağdan şimdiki zaman talep edemez.

Bu nedenle, programlama bittikten hemen sonra geçerli saati ayarlamak istiyorum. Aşağıdaki komutu kullanarak ST-LINK Yardımcı Program Komut Satırı Arabirimi'ni (ST-LINK_CLI) kullanarak flaşa veri yazabileceğimi biliyordum:

ST-LINK_CLI.exe -w32 <Address> <data> -Rst

Şu anda kod tarafından kullanılmayan bazı adreslere Unix zaman damgasını yazan basit bir test komut dosyası yazdım.

Zaman damgasını okumak ve RTC zamanını ayarlamak için kullanmak üzere bir işlev yazmak üzereydim. ST-LINK Yardımcı Programı Kullanıcı Kılavuzunda aşağıdakileri okuyana kadar :

-w32, Flash bellek, OTP, SRAM ve R / W kayıtlarına yazmayı destekler.

Kılavuz R / W kayıtlarına yazmayı desteklediğini söylediğinde, bu doğrudan RTC kayıtlarına erişip ayarlayabileceğim anlamına mı geliyor? Denedim ama bu kayıtlara yazamıyorum.

Artık mikrodenetleyici üzerinde işlemek için belirli bir işlev yazmam gerekmediği için bu yöntemi kullanmayı tercih ederim. Bu, kodlarını güncellemek yerine, şu anda kullanımda olan herhangi bir mikrodenetleyicinin RTC zamanını ayarlayabileceğim anlamına gelir.


Ne yapmayı amaçladım

RTC kayıtlarını ayarlamak için STM Referans Kılavuzunda açıklandığı gibi aşağıdaki adımları uygulamaya çalıştım :

  • PWR_CR kaydında DPB bitini ayarla
  • RTC_WPR kaydına 0xCA yaz
  • RTC_WPR kaydına 0x53 yaz
  • RTC_ISR kaydında INIT bitini ayarlayarak RTC'yi durdurun
  • RTC_PRER kaydına yazarak 1Hz saati seçin
  • RTC_TR kaydına yazarak geçerli saati yükle
  • RTC_DR kaydına yazarak geçerli tarihi yükle
  • RTC_ISR kaydındaki INIT bitini sıfırlayarak RTC'yi başlatın

Kayıtlara erişmek için aşağıdaki adresleri kullandım:

  • PWR_CR: 0x4000 7000
  • RTC_WPR: 0x4000 2824
  • RTC_ISR: 0x4000 280C
  • RTC_PRER: 0x4000 2810
  • RTC_TR: 0x4000 2800
  • RTC_DR: 0x4000 2804

Ne yanlış gitti

Bu kayıtların hiçbirine yazamıyorum. ST-LINK Utility ile aşağıdaki mesajı alıyorum:

Bellek yazma sırasında hata oluştu!

ST-LINK_CLI kullanma:

0x40007000'de 0x00000100 yazılıyor ... Hata!

Bu kayıtları okumak sorun değil, ancak onlara ST-LINK Yardımcı Programı'nı veya Komut Satırı Arabirimini kullanarak yazamıyorum.


Soru

ST-LINK Yardımcı Programını kullanarak R / W kayıtlarına nasıl yazabilirim?

Göz ardı ettiğim RTC kayıtlarına yazmaya izin vermek için bir tür yazma koruması var mı?


Bir anahtar kodu girilmediği sürece yazma korumalı olabilir.
Sparky256

İlk ipuçlarından çok şey bulduğunuzu görmekten memnun oldum. Genellikle bir çözümü soruyu düzenlemek yerine bir cevap olarak göndermelisiniz ve özellikle bunu şimdiye kadar kendiniz takip ettiğinizde, kabulünüzü buna taşımak uygun olacaktır.
Chris Stratton

Aslında ben böyle düşünmedim! Sizden de kredi almamı istesem de hala yapmam gerektiğini hissediyorum.
Spectre208

Programlamadan ne kadar süre sonra cihazınızın çalışması ve günün saatinin ne kadar doğru olması gerekir? RTC ne kadar doğru olursanız olun, en azından yıllarca kullanılıyorsa ve zamanlama gereksinimleriniz sıkıysa, sonunda biraz sürükleneceğinden endişeliyim.
Timo

Tek bir pille 10 yıl boyunca çalışması gerekiyor. Ancak, tüm cihazların verilerini bir kerede göndermesini önlemek için zaman şeması zaten rastgele bir sayı ile biraz değiştirildi. Bu nedenle RTC zaman kayması önemli değildir.
Spectre208

Yanıtlar:


4

Bazı kayıtlar yalnızca belirli bir erişim genişliği için yasaldır (yani, -w32 doğru olmayabilir) veya doğrulama ile ilgili bir soruna neden olabilecek yazılı değerleri tekrar okuyamayabilir.

Ayrıca, öğelere erişme sırasında sıra veya durum kısıtlamaları olabilir.

En akla gelebilecek sorunların çözümü için bir seçenek, RAM'de çalışmak için bağlantılı olan işi yapmak için küçük bir program hazırlamak olacaktır. Ofseti bulduktan sonra değiştirilen sürümü yükledikten ve çalıştırarak verileri ikilisinin yerine kullanabilirsiniz. Veya programın, RAM'i, dosyanın uzantıları dışındaki bir bölgesinden, çalıştırmadan önce ayarlayacağınız bir değerden almasını sağlayabilirsiniz. Köpüğün daha hassas bir şekilde kontrol edilmesiyle, CPU kayıtlarında değerleri de iletebilirsiniz, ancak bunu yapmak için ST'ler yerine alternatif açık kaynak komut satırı programına ihtiyacınız olabilir (RAM yöntemindeki bu küçük rutin, bu programın yazmayı nasıl başardığını yanıp söner)


3

Yani, problemlerden biri, Chris Stratton'un işaret ettiği gibi:

Bazı kayıtlar .. doğrulama ile ilgili bir soruna neden olabilecek yazılı değerleri tekrar okuyamayabilir.

Bu, doğrulama işleminin başarısız olduğu ve yazma işlemi başarılı olsa bile hatanın görüntülenmesine neden olduğu anlamına geliyordu.

PWR_ISR kaydını okurken, INIT bitini ayarladıktan sonra tekrar kaydı okurken aldığım cevap aşağıdadır:

0x4000280C: 00000027

0x400280C'de 0x00000080 yazılıyor ... Hata!

0x4000280C: 000000A7

ST-LINK Yardımcı Programının doğrulanması, adrese yazılan ve adresten okunan değerin eşleşip eşleşmediğini kontrol eder. Bu durumda, INIT biti ayarlandığından, iki değer eşleşmese de yazma işlemi başarılı olmuştur.

Diğer sorun, yazma işleminin etkisini fark edemediğim oldu. Mikrodenetleyiciye bağlıyken, ST-LINK ("sıfırlama altında bağlan" olarak bilinir) tarafından sıfırlama durumunda tutulur. Mikro denetleyiciye durmadan veya sıfırlamadan bağlanan HOTPLUG bağlantı seçeneğini kullanmam gerekiyordu.

“Sıfırlama altında bağlan” seçeneği, herhangi bir talimat vermeden önce hedefe bağlanmayı sağlar. Bu, hedefin JTAG / SWD pinlerini devre dışı bırakan bir kod içermesi gibi birçok durumda yararlıdır.

“HotPlug” seçeneği, hedefe durmadan veya sıfırlamadan bağlanmayı sağlar. Bu, uygulama çalışırken RAM adreslerini veya IP kayıtlarını güncellemek için yararlıdır

Toplu iş dosyası tamamen istediğim gibi çalışır! Komut şimdi şöyle görünüyor:

ST-LINK_CLI.exe -c HOTPLUG -w32 <Address> <data> -w32 <Address> <data> ...

1

Bence olan şey yazma işleminden sonra bir doğrulama okuması yapılması. Aynı kayıt okumada geçerli saati döndürürse, RTC'yi güncellemeyi başarabilmenize rağmen hata ayıklayıcı gerçekleşmez. Bu, güç kaydındaki bir sorunu açıklamak için daha az olasıdır (hata ayıklayıcı bu kayıt defterine çok başlık altında erişmediği sürece). Okunan değeri manuel olarak kontrol edin. Daha önemli bir sorun olsaydı, bu okuma da başarısız olabilir. Ayrıca listenizdeki diğer kayıtları da deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.