Longan NanoがPlatformIOで使えなくなっているので、なんとかする話

# はじめに
秋月で購入した[Sipeed Longan Nano](https://akizukidenshi.com/catalog/g/g114678/)を試してみようと意気込んでいたところ、Sipeed公式サイトで紹介されている [Platformを利用した開発環境の構築](https://longan.sipeed.com/en/get_started/pio.html)がうまくいきませんでした…。

調べてみると、どうやら2023年7月頃からPlatformIO向けのダウンロード先が落ちてしまっているようです。日本語で開発環境の構築方法を紹介している記事もいくつか見つかりましたが、いずれも情報が古く、現在の状況には対応できていませんでした。

幸いにも、海外の方が[解決策](https://github.com/sipeed/platform-gd32v/issues/40)を見つけてくださっていたので、本記事ではその情報を基に、**環境構築からLチカまでの方法**を日本語で紹介したいと思います。

# 必要なもの
- Longan Nano本体
- USB Type-Cケーブル
- Windows PC (windows10/11)

# VSCodeとPlatformIOのインストール
※既に、VSCodeとPlatformIOを導入済みの方は飛ばしてください。

まずは、[Visual Studio Code](https://code.visualstudio.com)をダウンロード&インストールします。
インストールが終わったら、VSCodeを起動し、左の「拡張機能」タブを開きます。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/3e727564-5f5a-17de-fa41-b2935dc3d855.png)

検索窓に「PlatformIO」と入力し、表示された「PlatformIO IDE」をインストールします。インストールには少し時間がかかるので、辛抱強く待ちましょう。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/348955d2-d6f0-1140-5700-e3461d14d575.png)

左側に虫さんのアイコンが増えているたら、インストール成功です。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/c03ed498-f9b6-069e-4772-356d67b2b606.png)

# プロジェクトの作成
次に、PlatformIOのホーム画面から「+New Project」をクリックします。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/1528038a-8719-fc5c-8d70-0b6dab6d4f39.png)

「Name」の欄にプロジェクト名を入力します。好きな名前で大丈夫です。

「Board」と「Framework」は後で変更するので適当に選んでください。とりあえず、「Arduino Uno」と「Arduino」にしておきます。

最後に、「Finish」ボタンを押して、プロジェクトを作成します。
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/bdca2692-09ce-d724-1687-0cedf0883de3.png)

# Longan Nano関係のファイルのダウンロード
PlatformIO向けのダウンロード先が利用できなくなっているため、必要なファイルを手動でダウンロードします。
以下のリンクからファイルを取得してください。
https://sourceforge.net/projects/platformio-storage/files/packages/
![スクリーンショット 2024-09-10 140623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/a546cd88-b37c-468e-7e40-d0dd31cb9dc0.png)

ダウンロードするファイルは以下の4つです。
- framework-gd32vf103-sdk-1.0.0.tar.gz
- toolchain-gd32v-windows_x86-9.2.0.tar.gz
- tool-openocd-gd32v-windows_x86-0.1.1.tar.gz
- tool-gd32vflash-windows-0.1.0.tar.gz

ファイルを探すのが大変な場合は、ページ内検索「Ctrl+F」を使って見つけてください。
![スクリーンショット 2024-09-10 141641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/077b0ebe-d5a1-edaf-a765-567055f1939c.png)

ダウンロードが完了したら、それぞれのファイルを解凍してください。
![スクリーンショット 2024-09-10 141845.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/b23b49cb-0eef-b53f-f1e9-80a661c06ef6.png)

解凍した4つのフォルダを、さきほど作成したプロジェクトのフォルダ内に移動させます。

プロジェクトフォルダはデフォルトであれば、次のパスにあるはずです。
`C:\Users\ユーザー名\Documents\PlatformIO\Projects\プロジェクト名`

プロジェクトフォルダ内に「packages」という名前のフォルダを新しく作成し、解凍した4つのフォルダを中に移動します。

![スクリーンショット 2024-09-10 142428.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/c3e1fa87-0593-cce3-08bc-a98299d79d32.png)

現時点でフォルダ構成は以下のようになっているはずです。
```
├─.pio
│  └─build
├─.vscode
├─include
├─lib
├─packages
│  ├─framework-gd32vf103-sdk-1.0.0
│  ├─tool-gd32vflash-windows-0.1.0
│  ├─tool-openocd-gd32v-windows_x86-0.1.1
│  └─toolchain-gd32v-windows_x86-9.2.0
├─src
└─test
```

# `platformio.ini`の編集
VSCodeでplatformio.iniを開き、以下のように書き換えます。
`platform_packages = `の部分で、手動でダウンロードしたフォルダの相対パスを指定しています。
```
[env:sipeed-longan-nano]
platform = https://github.com/sipeed/platform-gd32v.git
board = sipeed-longan-nano
framework = gd32vf103-sdk
platform_packages = framework-gd32vf103-sdk @ file://packages\framework-gd32vf103-sdk-1.0.0
                    toolchain-gd32v @ file://packages\toolchain-gd32v-windows_x86-9.2.0
                    tool-openocd-gd32v @ file://packages\tool-openocd-gd32v-windows_x86-0.1.1
                    tool-gd32vflash @ file://packages\tool-gd32vflash-windows-0.1.0
upload_protocol = dfu
```

# Lチカプログラムの作成
次に、src/main.cを開き、以下のLチカ用プログラムに書き換えます。ファイル名が`main.cpp`の場合は、`main.c`に変更してください。
```c
#include "gd32vf103.h"
#include <stdio.h>

/* BUILTIN LED OF LONGAN BOARDS IS PIN PC13 */
#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC
#define LED_GPIO_CLK RCU_GPIOC

void delay_1ms(uint32_t count)
{
  uint64_t start_mtime, delta_mtime;

  // Don't start measuruing until we see an mtime tick
  uint64_t tmp = get_timer_value();
  do
  {
    start_mtime = get_timer_value();
  } while (start_mtime == tmp);

  do
  {
    delta_mtime = get_timer_value() - start_mtime;
  } while (delta_mtime < (SystemCoreClock / 4000.0 * count));
}

void longan_led_init()
{
  /* enable the led clock */
  rcu_periph_clock_enable(LED_GPIO_CLK);
  /* configure led GPIO port */
  gpio_init(LED_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_PIN);

  GPIO_BC(LED_GPIO_PORT) = LED_PIN;
}

void longan_led_on()
{
  /*
   * LED is hardwired with 3.3V on the anode, we control the cathode
   * (negative side) so we need to use reversed logic: bit clear is on.
   */
  GPIO_BC(LED_GPIO_PORT) = LED_PIN;
}

void longan_led_off()
{
  GPIO_BOP(LED_GPIO_PORT) = LED_PIN;
}
/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
  longan_led_init();

  while (1)
  {
    /* turn on builtin led */
    longan_led_on();
    delay_1ms(1000);
    /* turn off uiltin led */
    longan_led_off();
    delay_1ms(1000);
  }
}
```

この時点でコンパイルが通るか、一度確認をしておきます。左下のチェックマークを押してコンパイルをしてみましょう。エラーが出る場合は、フォルダ構成や`platform.ini`を再度確認してください。
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/145de43c-f919-068f-064d-63bb56abd667.png)

# ドライバの設定
ここからは、Longan Nanoにプログラムを書き込むための準備をしていきます。

以下のリンクから「UsbDriverTool」をダウンロードし、解凍します。
https://visualgdb.com/UsbDriverTool/

解凍すると、「UsbDriverTool」というフォルダが生成されるので、中にある「UsbDriverTool.exe」を実行します。
![図9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/2c7c60e0-1db5-38c6-e9f9-5a1b3900abc0.png)

次に、Longan NanoをUSB Type-CケーブルでPCに接続し、DFUモードにします。
DFUモードに入るには、以下の操作を行います。
１．BOOTボタンを押す
２．RESETボタンを押す
３．RESETボタンを離す
４．BOOTボタンを離す
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/30371fc3-8a3c-99ea-ee00-dcdeccd52483.png)

Longan NanoがDFUモードになると、UsbDriverToolの画面に名前が空白のデバイスが表示されます。
このデバイスをダブルクリックし、「WinUSB」を選択して「Install」を押します。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/5acebf4b-57dc-a5ba-7119-235eb5e003cc.png)

# プログラムの書き込み
最後にVSCodeの画面左下にある「→」マークを押して、プログラムを書き込みます。
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526610/baa47451-4d32-781d-5479-5046ecc58f9b.png)

Longan NanoのLEDがチカチカと点滅すれば成功です！