[SC64][DOCS] Updated documentation

This commit is contained in:
Mateusz Faderewski 2023-08-26 13:37:48 +02:00
parent b68d4a4be0
commit e170abdcd3
13 changed files with 332 additions and 134 deletions

View File

@ -1,8 +1,5 @@
# SC64 - an open source Nintendo 64 flashcart # <p style="text-align: center;">SummerCart64 - a fully open source Nintendo 64 flashcart</p>
[<p style="text-align: center;"><img src="assets/sc64_logo.svg" /></p>](assets/sc64_logo.svg)
[<img src="assets/sc64_logo_256_160.png" />](assets/sc64_logo_256_160.png)
---
## Features ## Features
- 64 MiB SDRAM memory for game and save data - 64 MiB SDRAM memory for game and save data
@ -29,38 +26,31 @@
- [Quick startup guide](./docs/00_quick_startup_guide.md) - [Quick startup guide](./docs/00_quick_startup_guide.md)
- [Memory map](./docs/01_memory_map.md) - [Memory map](./docs/01_memory_map.md)
- [USB commands](./docs/02_usb_commands.md) - [N64 commands](./docs/02_n64_commands.md)
- [N64 commands](./docs/03_n64_commands.md) - [USB interface](./docs/03_usb_interface.md)
- [Config options](./docs/04_config_options.md) - [Config options](./docs/04_config_options.md)
- [FW/SW building](./docs/05_fw_sw_building.md) - [FW and SW info](./docs/05_fw_and_sw_info.md)
- [Manufacturing guidelines](./docs/06_manufacturing_guidelines.md) - [Build guide](./docs/06_build_guide.md)
---
## How do I get one?
I've prepared all necessary manufacturing files on [PCBWay Shared Project](https://www.pcbway.com/project/shareproject/SC64_an_open_source_Nintendo_64_flashcart_14b9688a.html) site.
Full disclosure: for every order made through this link I will receive 10% of PCB manufacturing and PCB assembly service cost. This is a great way of supporting further project development.
<a href="https://www.pcbway.com/project/shareproject/SC64_an_open_source_Nintendo_64_flashcart_14b9688a.html"><img src="https://www.pcbway.com/project/img/images/frompcbway-1220.png" alt="PCB from PCBWay" /></a>
If you don't need a physical product but still want to support me then check my [GitHub sponsors](https://github.com/sponsors/Polprzewodnikowy) page.
---
## Where's menu?
Menu, as known from 64drive or EverDrive-64, is currently under development. Progress can be tracked in [N64FlashcartMenu](https://github.com/Polprzewodnikowy/N64FlashcartMenu) repository.
Ambitious goal of this software is to target every flashcart available on the market. However, main focus for now is getting at least basic UI running on the SC64.
--- ---
## Help / Q&A ## Help / Q&A
For any questions related to this project, please use [*Discussions*](https://github.com/Polprzewodnikowy/SummerCollection/discussions) tab in GitHub repository. For any questions related to this project, please use [*Discussions*](https://github.com/Polprzewodnikowy/SummerCart64/discussions) tab in GitHub repository.
Do not use my e-mail for these questions, as I want to have a centralized knowledge base accessible for everyone interested in this project. Using discussions tab is highly encouraged as it allows to have centralized knowledge database accessible for everyone interested in this project.
I'm also active at [N64brew](https://discord.gg/WqFgNWf) Discord server as `korgeaux#5558` but keep in mind that [*Discussions*](https://github.com/Polprzewodnikowy/SummerCollection/discussions) tab is a preferred option. **Discord is not a replacement for contact form in any way.** I'm also active at [N64brew](https://discord.gg/WqFgNWf) Discord server as `korgeaux` but keep in mind that [*Discussions*](https://github.com/Polprzewodnikowy/SummerCart64/discussions) tab is a preferred option.
---
## How do I get one?
One option is to ask in `#summer-cart-64` channel on [N64brew](https://discord.gg/WqFgNWf) Discord server if someone is making a group order.
If you want to order it yourself then I've prepared all necessary manufacturing files on [PCBWay Shared Project](https://www.pcbway.com/project/shareproject/SC64_an_open_source_Nintendo_64_flashcart_14b9688a.html) site.
Full disclosure: for every order made through this link I will receive 10% of PCB manufacturing and PCB assembly service cost. This is a great way of supporting further project development.
If you don't need a physical product but still want to support me then check my [GitHub sponsors](https://github.com/sponsors/Polprzewodnikowy) page.
--- ---
@ -73,6 +63,8 @@ I'm also active at [N64brew](https://discord.gg/WqFgNWf) Discord server as `korg
## Finished example ## Finished example
[<img src="assets/sc64_finished_example.jpg" alt="SC64 finished example" width="800" />](assets/sc64_finished_example.jpg) [<img src="assets/sc64_finished_example.jpg" alt="SC64 finished example" width="800" />](assets/sc64_finished_example.jpg)
[<img src="assets/sc64_pcb_front.jpg" alt="SC64 PCB front" width="800" />](assets/sc64_pcb_front.jpg)
[<img src="assets/sc64_pcb_back.jpg" alt="SC64 PCB back" width="800" />](assets/sc64_pcb_back.jpg)
--- ---

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

BIN
assets/sc64_pcb_back.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

BIN
assets/sc64_pcb_front.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

View File

@ -1,15 +1,16 @@
- [First time setup](#first-time-setup) - [First time setup on PC](#first-time-setup-on-pc)
- [Firmware backup/update](#firmware-backupupdate) - [Firmware backup/update](#firmware-backupupdate)
- [Uploading game and/or save](#uploading-game-andor-save) - [Running menu in standalone mode](#running-menu-in-standalone-mode)
- [Downloading save](#downloading-save) - [Uploading game and/or save from PC](#uploading-game-andor-save-from-pc)
- [Running 64DD games](#running-64dd-games) - [Downloading save to PC](#downloading-save-to-pc)
- [Running 64DD games from PC](#running-64dd-games-from-pc)
- [Direct boot option](#direct-boot-option) - [Direct boot option](#direct-boot-option)
- [Debug terminal](#debug-terminal) - [Debug terminal on PC](#debug-terminal-on-pc)
- [LED blink patters](#led-blink-patters) - [LED blink patters](#led-blink-patters)
--- ---
## First time setup ## First time setup on PC
**Windows platform: replace `./sc64deployer` in examples below with `sc64deployer.exe`** **Windows platform: replace `./sc64deployer` in examples below with `sc64deployer.exe`**
@ -35,7 +36,15 @@ To print firmware metadata run `./sc64deployer firmware info sc64-firmware-{vers
--- ---
## Uploading game and/or save ## Running menu in standalone mode
Menu, as known from 64drive or EverDrive-64, is developed in another repository: [N64FlashcartMenu](https://github.com/Polprzewodnikowy/N64FlashcartMenu).
Download latest version from [here](https://github.com/Polprzewodnikowy/N64FlashcartMenu/releases) and put `sc64menu.n64` file in the root directory of the SD card.
When N64 is powered on menu is automatically loaded from the SD card. Supported file system formats are FAT32 and exFAT.
---
## Uploading game and/or save from PC
`./sc64deployer upload path_to_rom.n64 --save-type eeprom4k --save path_to_save.sav` `./sc64deployer upload path_to_rom.n64 --save-type eeprom4k --save path_to_save.sav`
@ -46,7 +55,7 @@ Arguments `--save-type` and/or `--save` can be omitted if game doesn't require a
--- ---
## Downloading save ## Downloading save to PC
`./sc64deployer download save path_to_save.sav` `./sc64deployer download save path_to_save.sav`
@ -55,7 +64,7 @@ Command will raise error when no save type is currently enabled in the SC64 devi
--- ---
## Running 64DD games ## Running 64DD games from PC
64DD games require DDIPL ROM and disk images. 64DD games require DDIPL ROM and disk images.
To run disk game type `./sc64deployer 64dd path_to_ddipl.n64 path_to_disk_1.ndd path_to_disk_2.ndd`. To run disk game type `./sc64deployer 64dd path_to_ddipl.n64 path_to_disk_1.ndd path_to_disk_2.ndd`.
@ -81,7 +90,7 @@ TV type cannot be forced when direct boot mode is enabled.
--- ---
## Debug terminal ## Debug terminal on PC
`sc64deployer` application supports UNFLoader protocol and has same functionality implemented as aforementioned program. `sc64deployer` application supports UNFLoader protocol and has same functionality implemented as aforementioned program.
Type `./sc64deployer debug` to activate it. Type `./sc64deployer debug` to activate it.

View File

@ -1,79 +0,0 @@
- [USB commands](#usb-commands)
- [USB command arguments](#usb-command-arguments)
- [**TIME_GET**](#t-time_get)
- [**TIME_SET**](#t-time_set)
- [**CIC_PARAMS_SET**](#b-cic_params_set)
---
## USB commands
| id | name | arg0 | arg1 | data | response | description |
| --- | ---------------------- | ------------ | ------------ | ---- | ---------------- | ------------------------------------------------------------- |
| `v` | **IDENTIFIER_GET** | --- | --- | --- | identifier | Get flashcart identifier `SCv2` |
| `V` | **VERSION_GET** | --- | --- | --- | version | Get flashcart firmware version |
| `R` | **STATE_RESET** | --- | --- | --- | --- | Reset flashcart state (CIC params and config options) |
| `B` | [**CIC_PARAMS_SET**](#b-cic_params_set) | cic_params_0 | cic_params_1 | --- | --- | Set CIC emulation parameters (disable/seed/checksum) |
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
| `C` | **CONFIG_SET** | config_id | new_value | --- | --- | Set config option |
| `a` | **SETTING_GET** | setting_id | --- | --- | current_value | Get persistent setting option |
| `A` | **SETTING_SET** | setting_id | new_value | --- | --- | Set persistent setting option |
| `t` | [**TIME_GET**](#t-time_get) | --- | --- | --- | time | Get current RTC value |
| `T` | [**TIME_SET**](#t-time_set) | time_0 | time_1 | --- | --- | Set new RTC value |
| `m` | **MEMORY_READ** | address | length | --- | data | Read data from specified memory address |
| `M` | **MEMORY_WRITE** | address | length | data | --- | Write data to specified memory address |
| `U` | **USB_WRITE** | type | length | data | N/A | Send data to be received by app running on N64 (no response!) |
| `D` | **DD_SET_BLOCK_READY** | success | --- | --- | --- | Notify flashcart about 64DD block readiness |
| `W` | **WRITEBACK_ENABLE** | --- | --- | --- | --- | Enable save writeback through USB packet |
| `p` | **FLASH_WAIT_BUSY** | wait | --- | --- | erase_block_size | Wait until flash ready / Get flash block erase size |
| `P` | **FLASH_ERASE_BLOCK** | address | --- | --- | --- | Start flash block erase |
| `f` | **FIRMWARE_BACKUP** | address | --- | --- | status/length | Backup firmware to specified memory address |
| `F` | **FIRMWARE_UPDATE** | address | length | --- | status | Update firmware from specified memory address |
| `?` | **DEBUG_GET** | --- | --- | --- | debug_data | Get internal FPGA debug info |
| `%` | **STACK_USAGE_GET** | --- | --- | --- | stack_usage | Get per task stack usage |
---
## USB command arguments
What follows is the description of the command arguments' bit fields.
These arguments are encoded in big-endian, and are laid out as such:
| | arg0 | arg1 |
| --- | --- | --- |
| bits | `[63:32]` | `[31:0]` |
---
### `B`: [**CIC_PARAMS_SET**](https://github.com/Polprzewodnikowy/SummerCart64/blob/v2.12.1/sw/controller/src/cic.c#L337)
| bits | description |
| --- | --- |
| `[56]` | Disable CIC |
| `[55:48]` | CIC seed (IPL2 and IPL3 stages) |
| `[47:0]` | Checksum |
---
### `t`: [**TIME_GET**](https://github.com/Polprzewodnikowy/SummerCart64/blob/v2.12.1/sw/controller/src/cfg.c#L410)
Same as [**TIME_SET**](#t-time_set).
---
### `T`: [**TIME_SET**](https://github.com/Polprzewodnikowy/SummerCart64/blob/v2.12.1/sw/pc/sc64.py#L795)
Date values use the [BCD](https://en.wikipedia.org/wiki/Binary-coded_decimal) format.
([RTC chip specifications](https://ww1.microchip.com/downloads/aemDocuments/documents/MPD/ProductDocuments/DataSheets/MCP7940N-Battery-Backed-I2C-RTCC-with-SRAM-20005010J.pdf))
| bits | description |
| --- | --- |
| `[63:56]` | Week day, starting at 1 (user-defined representation) |
| `[55:48]` | Hours |
| `[47:40]` | Minutes |
| `[39:32]` | Seconds |
| `[23:16]` | Year (from 0 to 99) |
| `[15:8]` | Month |
| `[7:0]` | Day |

254
docs/03_usb_interface.md Normal file
View File

@ -0,0 +1,254 @@
- [Protocol](#protocol)
- [Resetting communication](#resetting-communication)
- [PC -\> SC64 packets](#pc---sc64-packets)
- [**`CMD`** packet](#cmd-packet)
- [SC64 -\> PC packets](#sc64---pc-packets)
- [**`RSP`/`ERR`** packets](#rsperr-packets)
- [**`PKT`** packet](#pkt-packet)
- [Supported commands](#supported-commands)
- [`v`: **IDENTIFIER\_GET**](#v-identifier_get)
- [`response` (identifier)](#response-identifier)
- [`V`: **VERSION\_GET**](#v-version_get)
- [`response` (version)](#response-version)
- [`R`: **STATE\_RESET**](#r-state_reset)
- [`B`: **CIC\_PARAMS\_SET**](#b-cic_params_set)
- [`arg0` (cic\_params\_0)](#arg0-cic_params_0)
- [`arg1` (cic\_params\_1)](#arg1-cic_params_1)
- [`t`: **TIME\_GET**](#t-time_get)
- [`response` (time)](#response-time)
- [`T`: **TIME\_SET**](#t-time_set)
- [`arg0` (time\_0)](#arg0-time_0)
- [`arg1` (time\_1)](#arg1-time_1)
- [Asynchronous packets](#asynchronous-packets)
---
## Protocol
SC64 exposes itself in the system as simple serial device. This allows it to work without manually installed drivers.
Serial communication is also well supported in almost all programming languages making it easy to work with.
USB protocol use simple packet based communication. Every packet starts with 3 byte identifier and 1 byte data ID.
Every argument/data is sent as big-endian value.
### Resetting communication
Due to serial communication nature, data transfer between PC and flashcart might get out of sync (for example when long data transfer is aborted before sending/receiving all bytes).
Communication reset is done via emulated `DTR`/`DSR` pins.
Start reset procedure by setting `DTR` pin value to `high (1)`.
Next, observe `DSR` pin until its state is set to `high (1)`.
At this point communication has been reset and USB interface is disabled. Now it is a good moment to clear/purge any buffers.
Finish reset procedure by setting `DTR` pin value to `low (0)` and observe `DSR` pin until its state is set to `low (0)`.
Flashcart should be ready to accept new commands.
### PC -> SC64 packets
| identifier | description |
| ---------- | ------------------------ |
| `CMD` | Send command to the SC64 |
SC64 understands only one packet identifier - `CMD`.
Fourth byte denotes command type listed in [supported commands](#supported-commands) section.
#### **`CMD`** packet
General structure of packet:
| offset | type | description |
| ------ | -------------------- | -------------------------- |
| `0` | char[3] | `CMD` identifier |
| `3` | char[1] | Command ID |
| `4` | uint32_t | First argument (arg0) |
| `8` | uint32_t | Second argument (arg1) |
| `12` | uint8_t[data_length] | Command data (if required) |
`CMD` packet always require arguments to be sent even if command does not require them.
Arbitrary data length is derived from the argument if specific command supports it.
### SC64 -> PC packets
| identifier | description |
| ---------- | ------------------------------------ |
| `RSP` | Success response to the sent command |
| `ERR` | Error response to the sent command |
| `PKT` | Asynchronous data packet |
SC64 sends response packet `RSP`/`ERR` to almost every command sent from the PC.
Fourth byte is the same as in the command that triggered the response.
If command execution was not successful, then `RSP` identifier is replaced by the `ERR` identifier.
SC64 can also send `PKT` packet at any time as a response to action triggered by the N64 or the flashcart itself.
Fourth byte denotes packet type listed in the [asynchronous packets](#asynchronous-packets) section.
#### **`RSP`/`ERR`** packets
General structure of packet:
| offset | type | description |
| ------ | -------------------- | ---------------------- |
| `0` | char[3] | `RSP`/`ERR` identifier |
| `3` | char[1] | Command ID |
| `4` | uint32_t | Data length |
| `8` | uint8_t[data_length] | Response data (if any) |
`RSP`/`ERR` packet is sent as a response to the command sent by the PC.
`ERR` response might contain no (or undefined) data in the arbitrary data field compared to regular `RSP` packet.
#### **`PKT`** packet
General structure of packet:
| offset | type | description |
| ------ | -------------------- | ---------------------- |
| `0` | char[3] | `PKT` identifier |
| `3` | char[1] | Asynchronous packet ID |
| `4` | uint32_t | Data length |
| `8` | uint8_t[data_length] | Packet data (if any) |
Available packet types are listed in the [asynchronous packets](#asynchronous-packets) section.
---
## Supported commands
| id | name | arg0 | arg1 | data | response | description |
| --- | --------------------------------------- | ------------ | ------------ | ---- | ---------------- | ------------------------------------------------------------- |
| `v` | [**IDENTIFIER_GET**](#v-identifier_get) | --- | --- | --- | identifier | Get flashcart identifier `SCv2` |
| `V` | [**VERSION_GET**](#v-version_get) | --- | --- | --- | version | Get flashcart firmware version |
| `R` | [**STATE_RESET**](#r-state_reset) | --- | --- | --- | --- | Reset flashcart state (CIC params and config options) |
| `B` | [**CIC_PARAMS_SET**](#b-cic_params_set) | cic_params_0 | cic_params_1 | --- | --- | Set CIC emulation parameters (disable/seed/checksum) |
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
| `C` | **CONFIG_SET** | config_id | new_value | --- | --- | Set config option |
| `a` | **SETTING_GET** | setting_id | --- | --- | current_value | Get persistent setting option |
| `A` | **SETTING_SET** | setting_id | new_value | --- | --- | Set persistent setting option |
| `t` | [**TIME_GET**](#t-time_get) | --- | --- | --- | time | Get current RTC value |
| `T` | [**TIME_SET**](#t-time_set) | time_0 | time_1 | --- | --- | Set new RTC value |
| `m` | **MEMORY_READ** | address | length | --- | data | Read data from specified memory address |
| `M` | **MEMORY_WRITE** | address | length | data | --- | Write data to specified memory address |
| `U` | **USB_WRITE** | type | length | data | N/A | Send data to be received by app running on N64 (no response!) |
| `D` | **DD_SET_BLOCK_READY** | success | --- | --- | --- | Notify flashcart about 64DD block readiness |
| `W` | **WRITEBACK_ENABLE** | --- | --- | --- | --- | Enable save writeback through USB packet |
| `p` | **FLASH_WAIT_BUSY** | wait | --- | --- | erase_block_size | Wait until flash ready / Get flash block erase size |
| `P` | **FLASH_ERASE_BLOCK** | address | --- | --- | --- | Start flash block erase |
| `f` | **FIRMWARE_BACKUP** | address | --- | --- | status/length | Backup firmware to specified memory address |
| `F` | **FIRMWARE_UPDATE** | address | length | --- | status | Update firmware from specified memory address |
| `?` | **DEBUG_GET** | --- | --- | --- | debug_data | Get internal FPGA debug info |
| `%` | **STACK_USAGE_GET** | --- | --- | --- | stack_usage | Get per task stack usage |
---
### `v`: **IDENTIFIER_GET**
Get flashcart identifier `SCv2`
_This command does not require arguments or data._
#### `response` (identifier)
| offset | type | description |
| ------ | ------- | ----------- |
| `0` | char[4] | Identifier |
Identifier is always `SCv2` represented in ASCII code.
---
### `V`: **VERSION_GET**
Get flashcart firmware version
_This command does not require arguments or data._
#### `response` (version)
| offset | type | description |
| ------ | -------- | ------------- |
| `0` | uint16_t | Major version |
| `2` | uint16_t | Minor version |
| `4` | uint32_t | Revision |
Increment in major version represents breaking API changes.
Increment in minor version represents non breaking API changes.
Increment in revision field represents no API changes, usually it's denoting bugfixes.
---
### `R`: **STATE_RESET**
Reset flashcart state (CIC params and config options)
_This command does not require arguments or data._
_This command does not send response data._
---
### `B`: **CIC_PARAMS_SET**
Set CIC emulation parameters (disable/seed/checksum)
#### `arg0` (cic_params_0)
| bits | description |
| --------- | ------------------------------- |
| `[32:25]` | _Unused_ |
| `[24]` | Disable CIC |
| `[23:16]` | CIC seed (IPL2 and IPL3 stages) |
| `[15:0]` | Checksum (upper 16 bits) |
#### `arg1` (cic_params_1)
| bits | description |
| -------- | ------------------------ |
| `[31:0]` | Checksum (lower 32 bits) |
_This command does not send response data._
---
### `t`: **TIME_GET**
Date/time values use the [BCD](https://en.wikipedia.org/wiki/Binary-coded_decimal) format.
_This command does not require arguments or data._
#### `response` (time)
| offset | type | description |
| ------ | ------- | ------------------------------------ |
| `0` | uint8_t | Weekday (1 - 7), 1 represents Monday |
| `1` | uint8_t | Hours (0 - 23) |
| `2` | uint8_t | Minutes (0 - 59) |
| `3` | uint8_t | Seconds (0 - 59) |
| `4` | uint8_t | _Unused_ (returns zero) |
| `5` | uint8_t | Year (0 - 99) |
| `6` | uint8_t | Month (1 - 12) |
| `7` | uint8_t | Day (1 - 31) |
---
### `T`: **TIME_SET**
Date/time values use the [BCD](https://en.wikipedia.org/wiki/Binary-coded_decimal) format.
#### `arg0` (time_0)
| bits | description |
| --------- | ------------------------------------ |
| `[31:24]` | Weekday (1 - 7), 1 represents Monday |
| `[23:16]` | Hours (0 - 23) |
| `[15:8]` | Minutes (0 - 59) |
| `[7:0]` | Seconds (0 - 59) |
#### `arg1` (time_1)
| bits | description |
| --------- | -------------- |
| `[31:24]` | _Unused_ |
| `[23:16]` | Year (0 - 99) |
| `[15:8]` | Month (1 - 12) |
| `[7:0]` | Day (1 - 31) |
_This command does not send response data._
## Asynchronous packets
| id | name | data | description |
| --- | ---------------------- | -------------------- | ------------------------------------------- |
| `B` | [**BUTTON**]() | --- | Button on the back of the SC64 was pressed |
| `G` | [**DATA_FLUSHED**]() | --- | Data from `USB_WRITE` command was discarded |
| `U` | [**DEBUG_DATA**]() | debug_data | Data sent from the N64 |
| `D` | [**DISK_REQUEST**]() | disk_info/block_data | 64DD disk block R/W request |
| `I` | [**IS_VIEWER_64**]() | text | IS-Viewer 64 `printf` text |
| `S` | [**SAVE_WRITEBACK**]() | save_contents | Flushed save data |
| `F` | [**UPDATE_STATUS**]() | progress | Firmware update progress |

22
docs/05_fw_and_sw_info.md Normal file
View File

@ -0,0 +1,22 @@
- [Building FW/SW](#building-fwsw)
- [Docker method](#docker-method)
- [Lattice Diamond license](#lattice-diamond-license)
---
## Building FW/SW
### Docker method
Docker method is a preferred option.
Run `./docker_build.sh release` to build all firmware/software and generate release package.
For other options run script without any command to print help.
#### Lattice Diamond license
Lattice Diamond software is used to build FPGA bitstream, a free 1 year license is necessary to run the build process.
Repository already contains license attached to fake MAC address `F8:12:34:56:78:90` (path to the license: `fw/project/lcmxo2/license.dat`).
If the license expires, it is required to request new license from Lattice webpage.
New license can be attached to aforementioned MAC address or any other address.
In case of non default MAC address it is possible to provide it via `MAC_ADDRESS` environment variable.
For example: `MAC_ADDRESS=AB:00:00:00:00:00 ./docker_build.sh release`.

View File

@ -6,6 +6,7 @@
- [**Putting it together**](#putting-it-together) - [**Putting it together**](#putting-it-together)
- [**Initial programming**](#initial-programming) - [**Initial programming**](#initial-programming)
- [**Troubleshooting**](#troubleshooting) - [**Troubleshooting**](#troubleshooting)
- [*`primer.py` threw error on `Bootloader -> SC64 FLASH` step*](#primerpy-threw-error-on-bootloader---sc64-flash-step)
--- ---
@ -28,10 +29,12 @@ Please download latest release before proceeding with the instructions.
### **PCB requirements** ### **PCB requirements**
- Thickness: 1.2 mm ***Before ordering PCBs make sure you select correct options listed below:***
- At least ENIG plating or better
- PCB thickness: 1.2 mm
- Surface finish (plating): ENIG (Hard gold for edge connector is recommended but it's very expensive)
- PCB contains edge connector: yes - PCB contains edge connector: yes
- Beveled edge connector: yes, 45° - Beveled edge connector: yes, 45° (other angles also should work OK)
--- ---
@ -66,7 +69,7 @@ You can skip this step if PCB assembly service was used in previous steps.
For initial programming you are going to need a PC and a USB to UART (serial) adapter (3.3V signaling is required). For initial programming you are going to need a PC and a USB to UART (serial) adapter (3.3V signaling is required).
These steps assume you are using modern Windows OS (version 10 or higher). These steps assume you are using modern Windows OS (version 10 or higher).
As for software here's list of required applications: As for software, here's list of required applications:
- [FT_PROG](https://ftdichip.com/utilities/#ft_prog) - FTDI FT232H EEPROM programming software - [FT_PROG](https://ftdichip.com/utilities/#ft_prog) - FTDI FT232H EEPROM programming software
- [Python 3](https://www.python.org/downloads/) with `pip3` - necessary for initial programming script: `primer.py` - [Python 3](https://www.python.org/downloads/) with `pip3` - necessary for initial programming script: `primer.py`
@ -102,7 +105,7 @@ Congratulations! Your SC64 flashcart should be ready for use!
### **Troubleshooting** ### **Troubleshooting**
*`primer.py` threw error on `Bootloader -> SC64 FLASH` step* #### *`primer.py` threw error on `Bootloader -> SC64 FLASH` step*
This issue can be attributed to incorrectly programmed FT232H EEPROM in the first programming step. This issue can be attributed to incorrectly programmed FT232H EEPROM in the first programming step.
Check again in `FT_PROG` application if device was configured properly. Check again in `FT_PROG` application if device was configured properly.

View File

@ -1,15 +1,12 @@
# SC64 - an open source Nintendo 64 flashcart # <p style="text-align: center;">SummerCart64 - a fully open source Nintendo 64 flashcart</p>
[<p style="text-align: center;"><img src="../assets/sc64_logo.svg" /></p>](../assets/sc64_logo.svg)
[<img src="../assets/sc64_logo_256_160.png" />](../assets/sc64_logo_256_160.png)
---
## Documentation ## Documentation
- [Quick startup guide](./00_quick_startup_guide.md) - [Quick startup guide](./00_quick_startup_guide.md)
- [Memory map](./01_memory_map.md) - [Memory map](./01_memory_map.md)
- [USB commands](./02_usb_commands.md) - [N64 commands](./02_n64_commands.md)
- [N64 commands](./03_n64_commands.md) - [USB interface](./03_usb_interface.md)
- [Config options](./04_config_options.md) - [Config options](./04_config_options.md)
- [FW/SW building](./05_fw_sw_building.md) - [FW and SW info](./05_fw_and_sw_info.md)
- [Manufacturing guidelines](./06_manufacturing_guidelines.md) - [Build guide](./06_build_guide.md)

View File

@ -3,7 +3,7 @@ name = "sc64deployer"
version = "2.16.0" version = "2.16.0"
edition = "2021" edition = "2021"
authors = ["Polprzewodnikowy"] authors = ["Polprzewodnikowy"]
description = "SC64 loader and control software" description = "SummerCart64 loader and control software"
documentation = "https://github.com/Polprzewodnikowy/SummerCart64" documentation = "https://github.com/Polprzewodnikowy/SummerCart64"
[dependencies] [dependencies]