Raspberry PI PIO で NANDアクセスを高速化する

登壇する機会があったのでその際の資料。RP2040 に搭載されている Programmable IO を用いて、Parallel Command I/F である NAND IC へのアクセスを高速化検討した話。

rpi-pio-nand.pdf

資料は marp を使用して作成したので、以後は元になった資料の markdown 移植版

背景

最近 SSD 自作キット JISC-SSD で 時折放置してますが 遊んでいます。 途中まで C++で書いていましたが、気まぐれで Rust 再実装中...

RPi Pico: RP2040 Cortex-M0+ DualCore @133MHz NAND Flash: KIOXIA TC58NVG0S3HTA00 1Gbit SLC ECC なし

外観回路図抜粋RP2040 Block Diagram
width:400pxwidth:700pxwidth:600px
GPIO で NAND と直結
Read more  ↩︎

U# assembly definition が定義されていない旨のエラー対処

公開用に Packages/ 側で U# のアプリケーションを作っているときに、以下でビルドエラーになったのでの備忘録。

'/Packages/XXX/XXX.cs' does not belong to a U# assembly, have you made a U# assembly definition for the assembly the script is a part of?

エラーメッセージの通りで書き残すほどでもない気はするが、U# Assembly Definition についてあまり情報がなかったので書き残す

記事を書いている途中に公式ドキュメントを見つけました。 https://udonsharp.docs.vrchat.com/migration/#does-not-belong-to-u-assembly

Assembly Definition (asmdef) について

asmdef は定義済アセンブリを明示するための設定ファイル。

Unity C#で記述した Script がコンパイルされる際、 asmdef で定義を明示しない場合は Assembly-CSharp* にまとめられる。 自分の書いた Script とその他無関係の Script が同一のアセンブリにビルドされるため、クラス名の衝突であったりコンパイルの時間増加等の問題につながるため、特別な理由がなければ定義しておくほうが無難。

参考: 特殊フォルダーとスクリプトのコンパイル順 - Unity Documentation 2022.3

Read more  ↩︎

RustでUSB Mass Storage Class Bulk-Only Transportを実装する

掲題の通り Rust で USB Mass Storage Class (MSC) Bulk-Only Transport を実装した。 RAM 上の値を Disk Drive に見せかけたデバイスとして Windows から認識できるようになったので要所を書き残す。

実装には Rust を使用し、 Raspberry pi pico (rp2040) 上で動作確認を行っている。実装の Framework には embassy-rs を使用した。

USB 通信の構成・設定

Mass Storage Bulk Only 1.0 - usb.org に基づいて実装する。具体的に以下の通信を行う。

usb-config.png

Descriptor 構成

  • USB Device
    • Device Descriptor (MSC Bulk Only Transport)
    • Configuration Descriptor
      • Interface Descriptor0 (MSC Bulk Only Transport)
        • Endpoint Descriptor1: Bulk out
        • Endpoint Descriptor2: Bulk in

USB Mass Storage Class

USB(に限らない話だが)を用いた通信は Host/Device 双方の FW で共通のプロトコル定義に基づいた実装が必要だが、一般的に使われる機能については USB の仕様としてクラス定義されている。

例: キーボード・マウス等入力デバイス定義 Device Class Definition for Human Interface Devices(HID)

今日使われている OS で USB が使える環境にあれば、Host 側のドライバ実装は多くの場合用意されているので、独自のドライバ作成と署名・インストールの手順を省くことができる。 開発者は Device 側の FW を定義に基づいて実装するだけで良い。

このクラス定義のうち、外付け記憶装置を制御するための 1 つとして MSC がある。

Read more  ↩︎

2024年5月時点 VRChat Avatar Upload環境memo

Zenn 執筆環境構築のテスト記事も兼ねてアバター導入環境について言及。多分もっと丁寧な記事があると思うので備忘録程度。

必要な環境とその手順

  • VRChat アカウント
    • VRChat には Trust Rank という概念があり、作りたてのアカウントでは Visitor となっている
    • やり込んで Rank を上げるか、課金することで New User 以上の権限を持つアカウントになることで Upload 可能

      The transition between “Visitor” and “New User” is a special one — when a Visitor becomes a New User, they gain the ability to upload content to VRChat as long as they’re using a VRChat account. Users receive a notification when they have passed this rank, and are directed to the VRChat documentation page to get started with creating content.

  • Unity Hub
    • Unity は複数バージョンを共存させることがあり、これの管理に(?)Unity Hub を使用する
    • Unity.com から DL してセットアップしておく、また起動後アカウントやライセンス認証を求められる場合は Unity のアカウントも取得しておく
  • Unity 2022.3.6f1
    • VRChat 公式によるとこのバージョンが推奨のため、 Unity Hub 導入後に VRChat の現時点での最新バージョンをいれる
    • (筆者は 2019 を使ったことあるが 2022 が初なのでせっかくなので本記事を書き残す) > The current Unity version used by VRChat is 2022.3.6f1. If you have Unity Hub installed, you can click this link to install the correct version of Unity. 2022.3.6f1 is also available in the Unity editor release archive.
  • VRChat Creator Companion (VCC)
    • VRChat が Unity 向けに提供している Avatar, World 向けの SDK などを手軽に導入・管理(?)するためのツール
    • VRChat アカウント取得後なら https://vrchat.com/home/download から DL できる
  • (VCC 代替) ALCOM
    • anatawa12 さんが作成している VCC 互換ツール。 vrc-get/vrc-get - GitHub の GUI FrontEnd
    • 使ってみた感じ本家よりかなり高速で快適に使用できているので、オススメしたい。以後の説明で VCC を使い箇所は ALCOM で読み替え可
    • https://vrc-get.anatawa12.com/alcom/ から DL 可能
  • 何らかの画像エディタ
    • アバターの改変用。筆者はクリスタ常用 (だが、どちらかといえば PSD 同梱してくださる方が多い印象)
Read more  ↩︎