Changes

Jump to navigation Jump to search
→‎Suggested Features: Added 2 copies of wear leveling & indirect table
{{Note|Page under construction, information subject to change.}} The following is the documentation draft for a proposed Pine64 new PINE64 storage product , PineFlash. As such, PineFlash is proposed by the community and , as of April 2021, is '''notneither endorsed nor acknowledged''' an by PINE64 as a possible new official Pine64 PINE64 product. This content is the result of initial discussions about this storage device , documented in [https://forum.pine64.org/showthread.php?tid=13301 this forum thread]. Please, consider joining us for discussion in [https://kiwiirc.com/nextclient/coffeespace.org.uk#pineflash IRC]. == Goal == The aim of this project is to create an open-hardware USB flash drive, hence the name ''PineFlash'', which can act as the basis of future projects in the area of open storage. An open-hardware flash device with open-source firmware would allow the community to address storage safety and information security. Additionally, issues such as speed, functionality and compatibility could also be addressed. == Requirements == {| class="wikitable"! Property! Minimum! Ideal|-| Read speed| [https://en.wikipedia.org/wiki/USB#USB_2.0 12 Mbit/s] (Full-Speed USB 1.x)| [https://en.wikipedia.org/wiki/USB#USB_2.0 480 Mbit/s] (High-Speed USB 2.0)|-| Write speed| 12 Mbit/s (Full-Speed USB 1.x)| 480 Mbit/s (High-Speed USB 2.0)|} == Road Map == This is intended to document the project direction towards a manufacturing-viable device. === Prototype === ==== Hardware ==== The initial idea is for the storage device to be in form of a "hat" for one of the BL602 devices manufactured and sold by PINE64, such as the [[Nutcracker]] board. '''TO-DO:''' Plan out hardware steps. ==== Software ==== # ''USB 1.x speed mass storage device, no real storage.'' Get the controller presenting itself as a mass storage device. Data read and written will just be placeholder data to prove that the USB communication is working correctly.# ''Single flash chip selected for storage - quad-SPI.'' Prove out that we can select a single flash chip, store data to it and read it back. This proves our understanding of the quad-SPI interface and implement some basic interface for communicating with a single flash chip.# ''Multiple flash chips selected for storage - quad-SPI.'' Prove that we can communicate with multiple flash chips via quad-SPI. == Prototyping == This is the documentation of the initial prototype design. === Hardware === The initial prototype is intended to be a "hat" for the community-driven [[Nutcracker]] project, based on the BL602 SoC. The CPU core is RISC-V (as the final controller is planned to be) and the SoC supports a quad-SPI flash interface. ==== Schematic ==== '''TO-DO:''' The proposed schematic for the device. ==== BOM ==== '''TO-DO:''' The bill of materials used in the schematic. * [https://nz.mouser.com/ProductDetail/Winbond/W25N512GWFIG?qs=T3oQrply3y%2Fc2oXtef14%252Bg%3D%3D 512Mb serial NAND] @ $3.23 ([https://nz.mouser.com/datasheet/2/949/w25n512gw_rev_c_011419-1608377.pdf Datasheet])* [https://ww1.microchip.com/downloads/en/DeviceDoc/22288A.pdf USB-to-SPI converter] ==== PCB ==== '''TO-DO:''' The PCB design for the device. === Software === The work on the BL602 is to be on-top of the documented work by [https://lupyuen.github.io/articles/book Lupyuen]. ==== Libraries ==== '''TO-DO:''' Document the prototype's software stack. * [https://github.com/hathach/tinyusb TinyUSB] - An open source software stack for slave USB devices ==== Testing ==== '''TO-DO:''' Figure out exactly how the prototype will be tested to ensure robustness and performance. == Suggested Features == This is a list of suggested features, collated and attributed (where possible). This list is not meant to encapsulate ''every'' possible idea or suggestion, just a series of plausible ones that can be considered within the scope of this project. * [https://forum.pine64.org/showthread.php?tid=13301&pid=90935#pid90935 Type-A & Type-C USB interfaces] ([https://forum.pine64.org/member.php?action=profile&uid=16880 barray])* [https://forum.pine64.org/showthread.php?tid=13301&pid=90935#pid90935 RAID] ([https://forum.pine64.org/member.php?action=profile&uid=16880 barray])* [https://forum.pine64.org/showthread.php?tid=13301&pid=91066#pid91066 Dynamically adjusted wear leveling pool] ([https://forum.pine64.org/member.php?action=profile&uid=7999 Arwen])* [https://forum.pine64.org/showthread.php?tid=13301 &pid=92518#pid92518 Keep 2 copies of the wear leveling & indirect table, with checksum, to avoid corruption] ([https://forum.pine64.org/member.php?action=profile&uid=7999 Arwen])* [https://forum.pine64.org/showthread.php?tid=13301&pid=91066#pid91066 USB Attached SCSI (UASP)]([https://forum.pine64.org/member.php?action=profile&uid=7999 Arwen])* [https://forum.pine64.org/showthread.php?tid=13301&pid=91066#pid91066 SMART (probably requires UASP first)] ([https://forum.pine64.org/member.php?action=profile&uid=7999 Arwen])* [https://forum.pine64.org/showthread.php?tid=13301&pid=92698#pid92698 Ability to define and enforce write barriers] ([https://forum.pine64.org/member.php?action=profile&uid=18910 dsimic])* [https://forum.pine64.org/showthread.php?tid=13301&pid=91118#pid91118 Fingerprint scanner] ([https://forum.pine64.org/member.php?action=profile&uid=20753 Julius_GU])* [https://forum.pine64.org/showthread.php?tid=13301&pid=91122#pid91122 Lit Pine logo on casing] ([https://forum.pine64.org/member.php?action=profile&uid=20753 Julius_GU]) == Additional Resources == * [https://forum.pine64.org/attachment.php?aid=2261 ''The PineDrive''] ([https://forum.pine64.org/member.php?action=profile&uid=20753 Julius_GU])

Navigation menu