Stlink: [fitur] Dukungan untuk GD32F303VGT6 (coreid tidak diketahui)

Dibuat pada 15 Feb 2019  ·  12Komentar  ·  Sumber: stlink-org/stlink

  • [X] Programmer/jenis papan: Stlink/v2
  • [X] Sistem operasi: Ubuntu 18.04.1
  • [X] Versi alat Stlink dan/atau git commit hash: v1.5.1-15-g3295ab4
  • [X] Nama alat baris perintah Stlink: st-flash
  • [X] Chip target (dan papan opsional): GD32F303VGT6

Chip terhapus dengan baik, tetapi mendapatkan kesalahan "coreid tidak diketahui, tidak yakin pemuat flash apa yang digunakan, batalkan! coreid: 2ba01477, chipid: 430" ketika sampai ke rutinitas penulisan.

Keluaran:

Flash page at addr: 0x080ff800 erased
2019-02-14T18:14:06 INFO common.c: Finished erasing 512 pages of 2048 (0x800) bytes
2019-02-14T18:14:06 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2019-02-14T18:14:06 ERROR flash_loader.c: unknown coreid, not sure what flash loader to use, aborting! coreid: 2ba01477, chipid: 430
2019-02-14T18:14:06 WARN flash_loader.c: Failed to write flash loader to sram!
2019-02-14T18:14:06 ERROR common.c: stlink_flash_loader_init() == -1
2019-02-14T18:14:06 DEBUG common.c: *** stlink_read_debug32 ffffffff is 0x8000000
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_reg
data_len = 2 0x2
 81 00

2019-02-14T18:14:06 DEBUG common.c: *** stlink_read_debug32 ffffffff is 0x8000004
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_reg
data_len = 2 0x2
 80 00

2019-02-14T18:14:06 DEBUG common.c: *** stlink_run ***
stlink_fwrite_flash() == -1
2019-02-14T18:14:06 DEBUG common.c: *** stlink_exit_debug_mode ***
2019-02-14T18:14:06 DEBUG common.c: *** stlink_write_debug32 a05f0000 to 0xe000edf0
2019-02-14T18:14:06 DEBUG common.c: *** stlink_close ***

Utilitas ST-LINK mengatakan:

```
ID Perangkat: 0x430
Ukuran flash perangkat: 1 Mbytes
Keluarga perangkat: STM32F10xx XL-density

codfeature-request errounknown-coreid generadocumention olinux programmestlinkv2 targegd32f3

Komentar yang paling membantu

Hai, Sizito.
Proyek sedikit berubah, tetapi cukup mudah untuk disejajarkan.

Ubah /include/stm32.h - menjadi seperti:
// id inti korteks

tentukan STM32VL_CORE_ID 0x1ba01477

tentukan CS32VL_CORE_ID 0x2ba01477

tentukan STM32F7_CORE_ID 0x5ba02477

Ubah src/flash_loader.c - di dalam fungsi stlink_flash_loader_write_to_sram menjadi seperti (~baris 264):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

Maka Anda perlu mengkompilasi utilitas stlink dengan perubahan itu dan itu akan berfungsi ...

Semua 12 komentar

Saya pikir mikrokontroler GD32 adalah tiruan dari mikroelektronika ST yang sebenarnya. Sangat menyenangkan untuk mendukung mereka tetapi kita tidak boleh merusak mikrokontroler yang didukung seperti dengan masalah #761 ini.

Untuk referensi: http://www.gigadevice.com/products/microcontrollers/gd32/arm-cortex-m4/mainstream-line/gd32f303-series/

Halo semua,
Saya menghadapi masalah yang sama dengan chip CS32F103C8T6, yang merupakan tiruan dari STM32F103C8T6.

Mungkin itu akan berharga bagi reporter, karena butuh banyak waktu untuk mencari tahu apa yang salah, - Saya telah menambahkan id inti chip saya dengan cara berikut:

diff --git a/include/stlink.h b/include/stlink.h
index abacd12..582de7b 100644
--- a/include/stlink.h
+++ b/include/stlink.h
@@ -53,6 +53,7 @@ extern "C" {
     /* cortex core ids */
     // TODO clean this up...
 #define STM32VL_CORE_ID 0x1ba01477
+#define CS32VL_CORE_ID 0x2ba01477
 #define STM32F7_CORE_ID 0x5ba02477

     // Constant STM32 memory map figures
diff --git a/src/flash_loader.c b/src/flash_loader.c
index 7684680..72ed495 100644
--- a/src/flash_loader.c
+++ b/src/flash_loader.c
@@ -262,6 +262,7 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
         loader_code = loader_code_stm32l;
         loader_size = sizeof(loader_code_stm32l);
     } else if (sl->core_id == STM32VL_CORE_ID
+            || sl->core_id == CS32VL_CORE_ID
             || sl->chip_id == STLINK_CHIPID_STM32_F3
             || sl->chip_id == STLINK_CHIPID_STM32_F3_SMALL
             || sl->chip_id == STLINK_CHIPID_STM32_F303_HIGH

Setelah ini - semua bekerja seperti yang diharapkan. Karena chip Anda berbeda, harap perhatikan untuk memeriksa ulang pengidentifikasi inti apa yang harus dikloning.

Salam, Volodymyr.

st-link (v2) adalah 'pergi ke berbagai tempat', saya baru saja menginstal nrf51822 (soc ble semikon nordik)
https://devzone.nordicsemi.com/f/nordic-qa/13869/openocd-promgram-nrf51822-with-st-link-v2-mini
https://devzone.nordicsemi.com/f/nordic-qa/12316/program-bluetooth-for-nrf51822-yunjia-board-with-stlink-v2
tapi saya menggunakan openocd meskipun lol
intinya mungkin kita mungkin perlu mengerjakan ulang st-link sebagai modul pipa
st-link cukup banyak digunakan sebagai dongle swd generik. openocd saya pikir memisahkan dongle yaitu st-link dan target soc misalnya stm32f103 (yang saya kira akan menjadi default untuk ini) dan untuk sisanya mereka mungkin perlu 'plugin' atau socs tambahan yang mungkin berbeda dari stm32 (bahkan klonnya)

Halo semua,
Saya menghadapi masalah yang sama dengan chip CS32F103C8T6, yang merupakan tiruan dari STM32F103C8T6.

Mungkin itu akan berharga bagi reporter, karena butuh banyak waktu untuk mencari tahu apa yang salah, - Saya telah menambahkan id inti chip saya dengan cara berikut:

diff --git a/include/stlink.h b/include/stlink.h
index abacd12..582de7b 100644
--- a/include/stlink.h
+++ b/include/stlink.h
@@ -53,6 +53,7 @@ extern "C" {
     /* cortex core ids */
     // TODO clean this up...
 #define STM32VL_CORE_ID 0x1ba01477
+#define CS32VL_CORE_ID 0x2ba01477
 #define STM32F7_CORE_ID 0x5ba02477

     // Constant STM32 memory map figures
diff --git a/src/flash_loader.c b/src/flash_loader.c
index 7684680..72ed495 100644
--- a/src/flash_loader.c
+++ b/src/flash_loader.c
@@ -262,6 +262,7 @@ int stlink_flash_loader_write_to_sram(stlink_t *sl, stm32_addr_t* addr, size_t*
         loader_code = loader_code_stm32l;
         loader_size = sizeof(loader_code_stm32l);
     } else if (sl->core_id == STM32VL_CORE_ID
+            || sl->core_id == CS32VL_CORE_ID
             || sl->chip_id == STLINK_CHIPID_STM32_F3
             || sl->chip_id == STLINK_CHIPID_STM32_F3_SMALL
             || sl->chip_id == STLINK_CHIPID_STM32_F303_HIGH

Setelah ini - semua bekerja seperti yang diharapkan. Karena chip Anda berbeda, harap perhatikan untuk memeriksa ulang pengidentifikasi inti apa yang harus dikloning.

Salam, Volodymyr.

dapatkah Anda memberi tahu saya di mana Anda menambahkan kode ini untuk mem-flash ke cs32?
saya menggunakan Ubuntu untuk mem-flash kode dan saya memiliki masalah coreid yang sama tetapi saya tidak memiliki petunjuk di mana untuk menyalin kode Anda di atas untuk menyelesaikan masalah saya.
ty

Hai, Sizito.
Proyek sedikit berubah, tetapi cukup mudah untuk disejajarkan.

Ubah /include/stm32.h - menjadi seperti:
// id inti korteks

tentukan STM32VL_CORE_ID 0x1ba01477

tentukan CS32VL_CORE_ID 0x2ba01477

tentukan STM32F7_CORE_ID 0x5ba02477

Ubah src/flash_loader.c - di dalam fungsi stlink_flash_loader_write_to_sram menjadi seperti (~baris 264):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

Maka Anda perlu mengkompilasi utilitas stlink dengan perubahan itu dan itu akan berfungsi ...

Hai, Sizito.
Proyek sedikit berubah, tetapi cukup mudah untuk disejajarkan.

Ubah /include/stm32.h - menjadi seperti:
// id inti korteks

tentukan STM32VL_CORE_ID 0x1ba01477

tentukan CS32VL_CORE_ID 0x2ba01477

tentukan STM32F7_CORE_ID 0x5ba02477

Ubah src/flash_loader.c - di dalam fungsi stlink_flash_loader_write_to_sram menjadi seperti (~baris 264):
} else if (sl->core_id == STM32VL_CORE_ID
|| sl->core_id == CS32VL_CORE_ID
|| sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM
|| sl->chip_id == STLINK_CHIPID_STM32_F3

Maka Anda perlu mengkompilasi utilitas stlink dengan perubahan itu dan itu akan berfungsi ...

Hi dexvovich,
Atas bantuan Anda saya mengubah file seperti di atas tetapi saya mendapatkan masalah baru, bahwa ketika saya menggunakan perintah "make flash" sistem menggunakan konten lama "flash_loader.c".
Saya mencoba me-reboot pc tetapi saya mendapatkan masalah yang sama, dia tidak membaca perubahan baru yang saya buat.
Jika Anda tahu cara memaksanya menggunakan file baru, hubungi saya.
Ty

Saya menyarankan ke make clean dan membangun kembali untuk akhirnya menyelesaikan yang terakhir, yang tampaknya tidak sesuai dengan konteks masalah yang sebenarnya. Jika bantuan lebih lanjut diperlukan, jangan ragu untuk mengirimkan tiket baru untuk ini. ;-)

@eugenesia : Sangat mungkin Anda tidak memiliki akses ke MCU ini, tetapi bagi saya sepertinya perangkat ini entah bagaimana terkait dengan CKS32F103 dalam hal pengenal elektronik. Upaya untuk memecahkan masalah juga identik dengan pendekatan pertama untuk CKS32F103, yang memperkenalkan regresi (#757). Jadi ini mungkin telah diselesaikan dengan #805 juga. Apa yang Anda pikirkan?

@rayslinky : Bisakah Anda memverifikasi ini dengan #805?

@eugenesia : Sangat mungkin Anda tidak memiliki akses ke MCU ini, tetapi bagi saya sepertinya perangkat ini entah bagaimana terkait dengan CKS32F103 dalam hal pengenal elektronik. Upaya untuk memecahkan masalah juga identik dengan pendekatan pertama untuk CKS32F103, yang memperkenalkan regresi (#757). Jadi ini mungkin telah diselesaikan dengan #805 juga. Apa yang Anda pikirkan?

Hai @Nightwalker-87, Saya telah melihat kronologi peristiwa Anda seputar chip CS32 https://github.com/texane/stlink/issues/756#issuecomment -605629968 . Ini sedikit Komedi Kesalahan dan akan terus berlanjut jika Anda tidak menyelesaikannya, jadi terima kasih telah melakukannya.

Saya tidak berpikir #805 akan memperbaiki ini, karena itu menambahkan deteksi untuk ID chip STLINK_CHIPID_STM32_F1_MEDIUM (0x410). Dari https://github.com/texane/stlink/issues/769#issue -410536487 papan GD32 ini memiliki ID chip 0x430 (bukan 0x410) dan ID inti 0x2ba01477.

Mengidentifikasi papan GD32 dengan ID chipnya mungkin tidak akan berhasil. Versi terbaru _chipid.h_ menjelaskan nilai ID chip 0x430 sebagai milik papan STM32F1 STLINK_CHIPID_STM32_F1_XL . Jadi menetapkan nilai tersebut ke papan GD32 (klon dari papan STM32F303) akan merusak identifikasi untuk papan "STM32_F1_XL".

Kami dapat mencoba mengidentifikasi papan ini dengan ID intinya, tetapi kami tahu bahwa ID inti 0x2ba01477 bermasalah karena papan yang berbeda memiliki ID ini. Itulah mengapa perbaikan di #757 memperkenalkan regresi di #761 .

Inilah yang dapat saya kumpulkan tentang papan ini:

Papan | Pabrikan | Klon dari | Inti | ID Inti | ID Chip | Referensi
--- | --- | --- | --- | --- | --- | ---
CS32F103C8T6 | Sistem Kunci China (CKS) | STM32F103C8T6 | ARM Cortex-M3 | 0x2ba01477 | 0x410 ( STLINK_CHIPID_STM32_F1_MEDIUM ) | #756
STM32F401 | ST | T/A (asli) | ARM Cortex-M4 | 0x2ba01477 | ? (Saya tidak punya) | https://github.com/texane/stlink/issues/761#issuecomment -462068740
GD32F303VGT6 | Perangkat Giga | STM32F303 | Korteks Lengan-M4 | 0x2ba01477 | 0x430 | https://github.com/texane/stlink/issues/769#issue -410536487 halaman produk GigaDevice GD32

Dari masalah yang kami alami, tampaknya ID dari chip klon tidak dapat dipercaya. Mungkin kita harus dapat memilih pemuat flash menggunakan argumen baris perintah, seperti yang disarankan di sini https://github.com/texane/stlink/issues/761#issuecomment -462868649 ?

Solusi sementara mungkin untuk mengidentifikasi papan klon dengan ID inti DAN ID chip, yang semoga cukup unik?

Saya tidak berpikir #805 akan memperbaiki ini, karena itu menambahkan deteksi untuk ID chip STLINK_CHIPID_STM32_F1_MEDIUM (0x410). Dari #769 (komentar) papan GD32 ini memiliki ID chip 0x430 (bukan 0x410) dan ID inti 0x2ba01477.

Mengidentifikasi papan GD32 dengan ID chipnya mungkin tidak akan berhasil. Versi terbaru chipid.h menjelaskan nilai ID chip 0x430 sebagai milik papan STM32F1 STLINK_CHIPID_STM32_F1_XL. Jadi menetapkan nilai tersebut ke papan GD32 (klon dari papan STM32F303) akan merusak identifikasi untuk papan "STM32_F1_XL".

Anda di sini. Sejujurnya, saya bisa menemukannya sendiri, jika saya melihat lebih dekat - tidak apa-apa ...

Saya suka ide menggunakan core-id + chip-id + membacakan pabrikan untuk mengidentifikasi papan dengan benar - untuk papan asli dan juga untuk papan tiruan. Bahkan mungkin ada parameter ke-4 yang bisa membantu membedakannya. Seseorang harus melakukan penelitian tentang itu. Bagaimanapun itu bisa menjadi pendekatan untuk menghindari beberapa identifikasi palsu. Namun ini bisa di-hardcode tanpa perlu argumen baris perintah.

Gagasan memiliki tabel pencarian yang mirip dengan contoh di atas dimasukkan ke dalam dokumentasi kami, juga diinginkan dari sudut pandang saya. Itu dapat didasarkan pada daftar di /include/stlink/chipid.h dan /include/stm32.h . Ini juga bisa menggantikan /doc/testedboards.md yang saya yakini (sebagian) sudah ketinggalan zaman. Informasi yang tersedia dari sana dapat dimasukkan dalam tabel seperti itu.

Terkait dengan #903.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

vitormhenrique picture vitormhenrique  ·  13Komentar

gorynch picture gorynch  ·  5Komentar

purjus74 picture purjus74  ·  12Komentar

WRansohoff picture WRansohoff  ·  14Komentar

tabemann picture tabemann  ·  5Komentar