7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TOPPERSAdvent Calendar 2020

Day 18

RISC-V/32 Longan-nanoボードのTOPPERS BASE PLATFORM対応

Last updated at Posted at 2020-12-17

#Longan-nanoボードについて

Longan-nanoボードはSipeed社が販売するRISC-Vボードである。SoCコアはGigaDevice社のGD32VF103(RISC-V RV32IMAC)を使用しています。割込みはRISC-Vに拡張して、独自のベクター割込みが可能な割込み機構を追加している。価格は非常に安価で秋月電子から830円で購入できるにもかかわらず。160x80のカラーLCDとSPI対応のSDカードソケットを持ちます。
対応のデバイスは以下の通り。
・Chip built in 128KB Flash, 32KB SRAM
・4 x general purpose 16 bit timer, 2 x basic 16 bit timer, 1 x advanced 16 bit timer
・Watchdog, RTC, Systick
・3 x USART, 2 x I2C, 3 x SPI, 2 x I2S, 2 x CAN, 1 x USBFS (OTG)
・2 x ADC (10 channel), 2 x DAC
但し、USBFS-OTGは、デバイスピンのみ対応しHOSTとしては使用できません。
IMG_20201021_153411.jpg
写りが悪くて申し訳ありません。

#Longan-nanoボードのASPカーネル対応

リリース日は11月2日となってますが、11月21日にLongan-nanoボードの対応を行ったASPカーネルの個別パッケージを、一般公開しました。(以下のURL)

この個別パッケージには、Longan-nanoボード対応以外、以下の修正を行っています。
 ・idataからdataへの不要なコピーをやめる(K210のみ)
 ・logtaskのスタックサイズを2048に指定(K210のみ)
 ・割込み優先度を-15から-1に変更
 ・HI-FIVE1 REV-Bの対応(HI-FIVE1のみ)
 ・.dataセクションに.sdataセクションを追加
HI-FIVE1のREV-Bの対応では、make時、BOARDNO=0と設定するとRev.Aのコードを生成し、BOARDNO=1と設定すると、Rev.Bのコードを生成します。HI-FIVE1はSRAMのサイズが16KBしかないので、configureでsample1のビルド環境を設定する場合はSTACK_SIZEの設定を1.5KB位に設定しなおしてください。
Longan-nanoのプログラムの書き込みは、GigaDevice社のGD32 MCU Dfu Toolを使用しました。このツールは、HEXファイルの書き込みになりますので、configureでsample1環境を作る場合、elfファイルからhexファイルを生成してください。
Longan-nanoのシステムクロックは108MHzとしていますが、USBFS-OTGのクロックが48MHzなので、このクロックをシステムクロックから分周して生成する必要があります。USBクロックの分周比が0.5の倍数しか設定できないため、USBFS-OTGを動かすためにシステムクロックを24MHzの倍数に設定する必要があります。そのためLongan-nanoのシステムクロックをコンパイル設定で可変にできるようにしました。
コンパイルスイッチCKPLLMULを以下の設定に定義するとシステムクロックを変更できます。

/*

  • PLL clock multiplication factor
    */
    RCU_PLL_MUL2 PLL source clock multiply by 2
    RCU_PLL_MUL3 PLL source clock multiply by 3
    RCU_PLL_MUL4 PLL source clock multiply by 4
    RCU_PLL_MUL5 PLL source clock multiply by 5
    RCU_PLL_MUL6 PLL source clock multiply by 6
    RCU_PLL_MUL7 PLL source clock multiply by 7
    RCU_PLL_MUL8 PLL source clock multiply by 8
    RCU_PLL_MUL9 PLL source clock multiply by 9
    RCU_PLL_MUL10 PLL source clock multiply by 10
    RCU_PLL_MUL11 PLL source clock multiply by 11
    RCU_PLL_MUL12 PLL source clock multiply by 12
    RCU_PLL_MUL13 PLL source clock multiply by 13
    RCU_PLL_MUL14 PLL source clock multiply by 14
    RCU_PLL_MUL6_5 PLL source clock multiply by 6.5
    RCU_PLL_MUL16 PLL source clock multiply by 16
    RCU_PLL_MUL17 PLL source clock multiply by 17
    RCU_PLL_MUL18 PLL source clock multiply by 18
    RCU_PLL_MUL19 PLL source clock multiply by 19
    RCU_PLL_MUL20 PLL source clock multiply by 20
    RCU_PLL_MUL21 PLL source clock multiply by 21
    RCU_PLL_MUL22 PLL source clock multiply by 22
    RCU_PLL_MUL23 PLL source clock multiply by 23
    RCU_PLL_MUL24 PLL source clock multiply by 24
    RCU_PLL_MUL25 PLL source clock multiply by 25
    RCU_PLL_MUL26 PLL source clock multiply by 26
    RCU_PLL_MUL27 PLL source clock multiply by 27
    RCU_PLL_MUL28 PLL source clock multiply by 28
    RCU_PLL_MUL29 PLL source clock multiply by 29
    RCU_PLL_MUL30 PLL source clock multiply by 30
    RCU_PLL_MUL31 PLL source clock multiply by 31
    RCU_PLL_MUL32 PLL source clock multiply by 32

デフォルトはCKPLLMUL=RCU_PLL_MUL27で108MHzです。USBFS-OTGを使用する場合はCKPLLMUL=RCU_PLL_MUL24を設定しシステムクロックを96MHzにして分周比を2.0としてUSBクロック:48MHzを生成します。
UARTは写真のように、RX,TXピンからUSBシリアルのTX,RXピンとGNDを引き出しTeraTermで通信します。

#TOPPERS BASE PLATFORM対応

Longan-nanoに対応したTOPPERS BASE PLATFORM本体とリファレンス・マニュアルですが、会員向け早期リリースで2012年1月末を予定していましたが、順調に開発が進み今年のクリスマス前にV0.1.4としてリリースしました。

サンプル・プログラムとして以下の4つを用意しました。
・DEMO:LCDの文字、グラフィック表示、SDカードのFATファイルシステム対応、RTCの時刻表示
 添付のTeraTermの表示の通り、volumeコマンドのディレクトリ表示や
 DeviceコマンドのRTC設定、LEDの点灯等ができます
 flash-romが128KBしかなく、FAT long name用UNICODEテーブルを設定できす
 ディレクトリ表示がshort nameとなっています
・I2C:秋月AQM0802、ADT7410、EEPROMをI2C(SCL:PB6,SDA:PB7)に接続してLCD表示、温度取得、EEPROMの読み書きができるプログラム
・ADC:秋月のアナログジョイスティックをADC-CH0:PA0とADC-CH4:PA4に接続してジョイスティックの位置を表示するプログラム
・MON:sample1をタスクモニタ上で実行するプログラム
 deviceコマンドでLEDの点灯やRTCの設定ができます
 USER-SWをPA3に接続して、SWの割込み確認ができます。
       ===(SW)
 PA3(IN) ---+-+  +---- GND
      |
     10KΩ
      |
     3.3V

IMG_20201218_095348.jpg
DEMOを実行中

demo.png
DEMO実行中のタスクモニタの表示、volumeコマンドでSDカードのディレクトリを表示する

SPIの参考プログラムについて、3つのSPIはSPI0がLCD、SPI1がSDカードソケットにボード上で結線されています。DEMOのソースを見れば使い方がわかります。
USB-DEVICEについて、サンプル・プログラムとしては用意しませんでした。
USBFS-OTGはSTマイクロエレクトロニクス社のUSB-OTGデバイスとほぼ同じです。STM32F446NUCLEO_GCC/USBOをデバイス用に改造すればテストができます。
MakefileのUSB OTGのモードをDEVICEに(USB_OTG_MODE = USB_OTG_MODE_DEVICE)変更、システムクロックを96MHzに(CDEFS := $(CDEFS) -DCKPLLMUL=RCU_PLL_MUL24)変更。

なお、通常TIMER、I2S、CAN、DACのドライバは作成していません。
また、詳細な仕様は「TOPPERS BASE PLATFORM V0.1.4 Reference Manual(RV) 201218」を参照してください。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?