Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

全般的なTODO(日本語) #2

Open
askn37 opened this issue Oct 29, 2023 · 9 comments
Open

全般的なTODO(日本語) #2

askn37 opened this issue Oct 29, 2023 · 9 comments

Comments

@askn37
Copy link
Owner

askn37 commented Oct 29, 2023

このページは気がつくと更新されます。

It's written frankly, so even if it's automatically translated into English, it might not come across correctly.

進行中

提案、報告済

解決済

些細な、あるいはまだ報告していない提案と問題

(core)

  • あまりにも不親切で時代錯誤の、programmer_display、avr_display を、そろそろ考え直す時代。
    • 個々のpgmdouleで適切な表示は異なるはずだから、それぞれが自分の自由なdisplayを持てるべきでは?
    • 個々のAVR世代でメモリマップが違うから、これもmoduleカスタマーが責任を担うべきでは?
  • 常にexit(0)で終了してない?
    • コマンドライン不正以外は常に0で終わるかも。「サンキュー」が出る時は、$?は変化しないようだ。現状はrcだけがエラーを返せる?
  • DTR/RTSサポートをprogrammerセクションで記述できない(提案)
    • programmer に "preopen_macro=" なんかを追加して直接文字列で"rts_high;100ms;rts_low;100ms"などと書かせる?
  • コンパイル時のオプションやライブラリリンク情報を表示するコマンドラインスイッチが欲しい。例えば"perl -V"のように(提案)
    • バグレポートを書く時、これは明白に便利。
  • boot、application、appdataの最後にCRCを書き込む機能追加(誰得か分からんがmodernAVRにある機能で唯一誰も実現していない)
  • shebang に対応できると思う?
    • 無理だろう。現在のターミナルモードはそういう実装に全く向いていない。全く別のプロジェクトだろう。

(moderAVR 構成)

  • AVR_EBのPDICFG取扱ポリシー。HVを持ってしても解除できないUPDI絶対禁止ロックなので、安易に書き換えできないようにすべき。(注意喚起)
    • 個人的には"fuses size=9"に固定して、PDICFGは明示的に"fusea"を指定しなければ書けなくしている。これなら"-U fuses:w:file"で全体を書いても触れずに済む。デフォルト値バックアップファイルから書き戻す作業が多いため。

(serialupdi)

  • serialupdi の USERROW 書込が、施錠モードしか対応していない(普通のEEPROM/Flashとして扱えない)
    • usersig書換は実装依存で共通合意はないと思われる。PICkit4でも片方だけ? 両方できるUPDI4AVRのほうが珍しい。
  • serialupdi がフラッシュ領域のブロック消去に対応していない
    • チップ消去済のブロックにしか正しく書けないので、部分書き換えができない(まあ普通はできないか^^)
      • ブートローダはチップ消去できないので、逆に部分ブロック書き込みしかできない。両方できるUPDI4AVRのほうが珍しい。
  • Arduino IDE+シリアルモニターと組み合わせると、いつも書き込み後に真っ赤な画面になる。
    • ポートクローズの記述が不正か、そもそもUSB-CDCを正しく扱えていない?
    • 場当たり的対応は、post_close_delay を加える。

(jtagmkII)

  • jtagmkII で、いつからか"sernum"が認識されなくなった(おそらく memory "io" 設定の影響)
    • 不正ビルドの可能性があるので再試験保留中。

(これはずっと後回しで良い)

  • UPDI4AVRサポート追加の依頼
    • 施錠モードのUSERROW書換に、SRAM先頭アドレスを渡すために memory "data" の記述が必要。
      • 構成ファイル変更は他の実装で"data"をどう使っているか分からないので、クロス検証が必要。(じゃあserialupdiはどういう魔術なんだ?)
    • dump sib対応。ST500v2拡張コマンドかメモリコマンドで実装できるが、avrdude側がサポート未対応。
      • programmer に "updi_sib_support= 1" を追加可能にする。そして "jtagmkII.c" で対応する。
    • HV-activationを強制するコマンドラインオプションが実装できないか?
      • 現在はCPU状態から推測して、チップ消去時のみ許可するか、ジャンパーで強制している。
      • 自動判別がAVR_DA/DB/DDを区別できない
        • AVR_DDだけがHV対象。
        • 拡張された256bit SIBで判別できる?(これはUPDI4AVRの課題) 識別不能を確認。AVR_Dx=KV0で統一。tinyAVR=59B、AVR_EA=59Fで、主クロック仕様がわかるだけ
      • CMND_SET_XMEGA_PARAMSにそういう項目はない。
        • やるならCMND_ENTER_PROGかCMND_RESETを拡張するのがベター。
        • hvupdi_variant も渡す(印加するピン区別と電圧指定のため必須)

ちょっと別な話(ゆるい結合性)

  • macports に libserialport のビルドをプルする
  • STK500v1/2プロトコルエミュレーターのブラッシュアップ
  • m328p+ソフトウェアUPDIベースの、スタンドアロン・ブートライターFWブラッシュアップ

AVRデータシート日本語翻訳 https://avr.jp/ (添削)

@mcuee
Copy link

mcuee commented Oct 29, 2023

Thanks a lot.
どうもありがとうございます. (Using Google Translate).

@mcuee
Copy link

mcuee commented Oct 29, 2023

些細な、あるいはまだ報告していない提案と問題
Minor or unreported suggestions and issues (Google Translate)

If you can, please still report the issue to avrdude project. Thanks.

@askn37

This comment was marked as off-topic.

@askn37

This comment was marked as off-topic.

@askn37

This comment was marked as off-topic.

@askn37

This comment was marked as off-topic.

@askn37

This comment was marked as off-topic.

@askn37

This comment was marked as off-topic.

@askn37
Copy link
Owner Author

askn37 commented Dec 18, 2023

ATパックリポジトリが更新され、[Microchip AVR-Dx Series Device Support (2.4.286)]が公開された。

2.4.286 (2023-12-12) - Added AVR64DU28 and AVR64DU32.

待望の AVR-DUサポート初公開。ただしデータシートはまだ公開されていない。見つけられるのは ATDFとヘッダーファイルだけということだ。

早速ARパックをダウンロードしてAVR-DA/DBのヘッダーファイルと比較してみると、早速驚愕の事実が。AVRDUDE やブートローダーの実装に直接関わる部分を抜き書きすると、、、

--- test/PACK4/include/avr/ioavr64db32.h	2023-12-01 00:00:00
+++ test/PACK4/include/avr/ioavr64du32.h	2023-12-01 00:00:00

~~~

 ---------------------------------------------------------------------------
 NVMCTRL - Non-volatile Memory Controller
 --------------------------------------------------------------------------
 */
@@ -1503,13 +1055,14 @@
 {
     register8_t CTRLA;  /* Control A */
     register8_t CTRLB;  /* Control B */
-    register8_t STATUS;  /* Status */
+    register8_t CTRLC;  /* Control C */
+    register8_t reserved_1[1];
     register8_t INTCTRL;  /* Interrupt Control */
     register8_t INTFLAGS;  /* Interrupt Flags */
-    register8_t reserved_1[1];
-    _WORDREGISTER(DATA);  /* Data */
+    register8_t STATUS;  /* Status */
+    register8_t reserved_2[1];
+    _DWORDREGISTER(DATA);  /* Data */
     _DWORDREGISTER(ADDR);  /* Address */
-    register8_t reserved_2[4];
 } NVMCTRL_t;
 
 /* Command select */
@@ -1540,10 +1093,9 @@
 typedef enum NVMCTRL_ERROR_enum
 {
     NVMCTRL_ERROR_NOERROR_gc = (0x00<<4),  /* No Error */
-    NVMCTRL_ERROR_ILLEGALCMD_gc = (0x01<<4),  /* Write command not selected */
-    NVMCTRL_ERROR_ILLEGALSADDR_gc = (0x02<<4),  /* Write to section not allowed */
-    NVMCTRL_ERROR_DOUBLESELECT_gc = (0x03<<4),  /* Selecting new write command while write command already seleted */
-    NVMCTRL_ERROR_ONGOINGPROG_gc = (0x04<<4)  /* Starting a new programming operation before previous is completed */
+    NVMCTRL_ERROR_INVALIDCMD_gc = (0x01<<4),  /* Write command not selected or not valid */
+    NVMCTRL_ERROR_WRITEPROTECT_gc = (0x02<<4),  /* Write to section not allowed */
+    NVMCTRL_ERROR_CMDCOLLISION_gc = (0x03<<4)  /* Selecting new write command while programming is ongoing */
 } NVMCTRL_ERROR_t;

~~~

 /* NVMCTRL - Non-volatile Memory Controller */
 #define NVMCTRL_CTRLA  _SFR_MEM8(0x1000)
 #define NVMCTRL_CTRLB  _SFR_MEM8(0x1001)
-#define NVMCTRL_STATUS  _SFR_MEM8(0x1002)
-#define NVMCTRL_INTCTRL  _SFR_MEM8(0x1003)
-#define NVMCTRL_INTFLAGS  _SFR_MEM8(0x1004)
-#define NVMCTRL_DATA  _SFR_MEM16(0x1006)
-#define NVMCTRL_DATAL  _SFR_MEM8(0x1006)
-#define NVMCTRL_DATAH  _SFR_MEM8(0x1007)
-#define NVMCTRL_ADDR  _SFR_MEM32(0x1008)
-#define NVMCTRL_ADDR0  _SFR_MEM8(0x1008)
-#define NVMCTRL_ADDR1  _SFR_MEM8(0x1009)
-#define NVMCTRL_ADDR2  _SFR_MEM8(0x100A)
-#define NVMCTRL_ADDR3  _SFR_MEM8(0x100B)
+#define NVMCTRL_CTRLC  _SFR_MEM8(0x1002)
+#define NVMCTRL_INTCTRL  _SFR_MEM8(0x1004)
+#define NVMCTRL_INTFLAGS  _SFR_MEM8(0x1005)
+#define NVMCTRL_STATUS  _SFR_MEM8(0x1006)
+#define NVMCTRL_DATA  _SFR_MEM32(0x1008)
+#define NVMCTRL_DATA0  _SFR_MEM8(0x1008)
+#define NVMCTRL_DATA1  _SFR_MEM8(0x1009)
+#define NVMCTRL_DATA2  _SFR_MEM8(0x100A)
+#define NVMCTRL_DATA3  _SFR_MEM8(0x100B)
+#define NVMCTRL_ADDR  _SFR_MEM32(0x100C)
+#define NVMCTRL_ADDR0  _SFR_MEM8(0x100C)
+#define NVMCTRL_ADDR1  _SFR_MEM8(0x100D)
+#define NVMCTRL_ADDR2  _SFR_MEM8(0x100E)
+#define NVMCTRL_ADDR3  _SFR_MEM8(0x100F)

~~~

 #if (defined(__ASSEMBLER__) || defined(__IAR_SYSTEMS_ASM__))
-#  define USER_SIGNATURES_START     (0x1080)
-#  define USER_SIGNATURES_SIZE      (32)
-#  define USER_SIGNATURES_PAGE_SIZE (32)
-#else
-#  define USER_SIGNATURES_START     (0x1080U)
-#  define USER_SIGNATURES_SIZE      (32U)
-#  define USER_SIGNATURES_PAGE_SIZE (32U)
-#endif
-#define USER_SIGNATURES_END       (USER_SIGNATURES_START + USER_SIGNATURES_SIZE - 1)
-
-#if (defined(__ASSEMBLER__) || defined(__IAR_SYSTEMS_ASM__))
-#  define SIGNATURES_START     (0x1100)
+#  define SIGNATURES_START     (0x1080)
 #  define SIGNATURES_SIZE      (3)
 #  define SIGNATURES_PAGE_SIZE (128)
 #else
-#  define SIGNATURES_START     (0x1100U)
+#  define SIGNATURES_START     (0x1080U)
 #  define SIGNATURES_SIZE      (3U)
 #  define SIGNATURES_PAGE_SIZE (128U)
 #endif
 #define SIGNATURES_END       (SIGNATURES_START + SIGNATURES_SIZE - 1)

~~~

 #if (defined(__ASSEMBLER__) || defined(__IAR_SYSTEMS_ASM__))
-#  define PROD_SIGNATURES_START     (0x1103)
+#  define PROD_SIGNATURES_START     (0x1083)
 #  define PROD_SIGNATURES_SIZE      (125)
 #  define PROD_SIGNATURES_PAGE_SIZE (128)
 #else
-#  define PROD_SIGNATURES_START     (0x1103U)
+#  define PROD_SIGNATURES_START     (0x1083U)
 #  define PROD_SIGNATURES_SIZE      (125U)
 #  define PROD_SIGNATURES_PAGE_SIZE (128U)
 #endif
 #define PROD_SIGNATURES_END       (PROD_SIGNATURES_START + PROD_SIGNATURES_SIZE - 1)
 
 #if (defined(__ASSEMBLER__) || defined(__IAR_SYSTEMS_ASM__))
+#  define BOOTROW_START     (0x1100)
+#  define BOOTROW_SIZE      (256)
+#  define BOOTROW_PAGE_SIZE (256)
+#else
+#  define BOOTROW_START     (0x1100U)
+#  define BOOTROW_SIZE      (256U)
+#  define BOOTROW_PAGE_SIZE (256U)
+#endif
+#define BOOTROW_END       (BOOTROW_START + BOOTROW_SIZE - 1)

~~~

@@ -7078,6 +6162,26 @@
 #define FUSE8_DEFAULT  (0x0)
 #define FUSE_BOOTSIZE_DEFAULT  (0x0)
 
+/* Fuse Byte 9 Reserved */
+
+/* Fuse Byte 10 (PDICFG) */
+#define FUSE_LEVEL0  (unsigned char)_BV(0)  /* Protection Level Bit 0 */
+#define FUSE_LEVEL1  (unsigned char)_BV(1)  /* Protection Level Bit 1 */
+#define FUSE_KEY0  (unsigned char)_BV(4)  /* NVM Protection Activation Key Bit 0 */
+#define FUSE_KEY1  (unsigned char)_BV(5)  /* NVM Protection Activation Key Bit 1 */
+#define FUSE_KEY2  (unsigned char)_BV(6)  /* NVM Protection Activation Key Bit 2 */
+#define FUSE_KEY3  (unsigned char)_BV(7)  /* NVM Protection Activation Key Bit 3 */
+#define FUSE_KEY4  (unsigned char)_BV(8)  /* NVM Protection Activation Key Bit 4 */
+#define FUSE_KEY5  (unsigned char)_BV(9)  /* NVM Protection Activation Key Bit 5 */
+#define FUSE_KEY6  (unsigned char)_BV(10)  /* NVM Protection Activation Key Bit 6 */
+#define FUSE_KEY7  (unsigned char)_BV(11)  /* NVM Protection Activation Key Bit 7 */
+#define FUSE_KEY8  (unsigned char)_BV(12)  /* NVM Protection Activation Key Bit 8 */
+#define FUSE_KEY9  (unsigned char)_BV(13)  /* NVM Protection Activation Key Bit 9 */
+#define FUSE_KEY10  (unsigned char)_BV(14)  /* NVM Protection Activation Key Bit 10 */
+#define FUSE_KEY11  (unsigned char)_BV(15)  /* NVM Protection Activation Key Bit 11 */
+#define FUSE10_DEFAULT  (0x3)
+#define FUSE_PDICFG_DEFAULT  (0x3)
  • NVMCTRL version 4のレジスタ構成は、version 2より version5 に似ている。更に DATAレジスタが 32bit幅になっている。
  • SIGNATURE 領域アドレスが AVR-EB同様に変更された。更に BOOTROW 領域も追加されている。
  • FUSEに AVR-EB同様の PDICFGが追加された。怖い。

AVR-DUは AVR-DBをベースに MVIOを削除してUSB周辺機能に置き換えるだけかと想像していたが、その程度の変更では済まなかったようだ。長らくペンディングしていた理由はこれだろうか。AC/ADCや CLKCTRLにも細かな差異があるし、もしかするとチップマスクを丸ごと全部再設計したのか?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants