├── 3D-Modell ├── 9900 version │ ├── HackberryPi_CM5_9900_KeyboardSupport.STEP │ ├── HackberryPi_CM5_9900_Keyboard_Support.stl │ ├── HackberryPi_CM5_9900_Uppercase.STEP │ └── HackberryPi_CM5_9900_Uppercase.stl ├── Explosion.png ├── HackberryPi_CM5_Displaysupport.STEP ├── HackberryPi_CM5_Displaysupport.STL ├── HackberryPi_CM5_Lowercase.STEP ├── HackberryPi_CM5_Lowercase.STL ├── HackberryPi_CM5_Middlepart.STEP ├── HackberryPi_CM5_Middlepart.STL ├── HackberryPi_CM5_Redswitch.STL ├── HackberryPi_CM5_White_Screwtool.STL ├── Q10 version │ ├── HackberryPi_CM5_Q10_KeyboardSupport.STEP │ ├── HackberryPi_CM5_Q10_Keyboard_Support.stl │ ├── HackberryPi_CM5_Q10_Toprowkeys_Support.stl │ ├── HackberryPi_CM5_Q10_uppercase.STEP │ └── HackberryPi_CM5_Q10_uppercase.STL ├── Q20 version │ ├── HackberryPi_CM5_Q20_Keyboard_Support.STEP │ ├── HackberryPi_CM5_Q20_Keyboard_Support.STL │ ├── HackberryPi_CM5_Q20_Uppercase.STEP │ └── HackberryPi_CM5_Q20_Uppercase.STL └── README.md ├── Assembly └── README.md ├── Basic setup └── README.md ├── Battery ├── 105085-Air Transport-Report.pdf ├── IEC62133 Report-zrlk.pdf ├── KC-Report.pdf ├── README.md ├── UL1642-Report.pdf └── UN38.3-Report.pdf ├── Battery_Voltage_Measure ├── MAX17048-Datasheet.pdf ├── README.md └── get_battery_voltage.py ├── External Antenna └── README.md ├── Gallery ├── DHT20_Measure.png ├── Magnet_HackberryPi_1.png └── README.md ├── HackberryPi_Logo.png ├── Hardware ├── Bom_HackberryPi_CM5_Q20_rev0.html ├── README.md └── Schematic_HackberryPi_CM5_Q20.pdf ├── I2C Port ├── DHT20.py └── README.md ├── Keyboard ├── HackberryPi_CM5_9900.uf2 ├── HackberryPi_CM5_9900.vil ├── HackberryPi_CM5_Q20.uf2 ├── HackberryPi_CM5_Q20.vil └── README.md ├── LICENSE ├── Magnet backplate ├── Magnet.gif └── README.md ├── Mechnical_Drawing ├── HackberryPi_CM5_mechanical_drawing.DWG └── README.md ├── NVME Slot ├── Enable PCIE.png ├── Format.png ├── New Partition.png ├── README.md ├── ReadWrite Test.png ├── SD card copier.png └── SSD recognize.png ├── Operating System ├── Kali │ └── README.md ├── Manjaro │ └── README.md ├── ParrotOS │ └── README.md ├── README.md ├── RaspberryPi_OS │ └── README.md ├── Ubuntu │ └── README.md ├── hyperpixel4.dtbo └── vc4-kms-dpi-hyperpixel4sq.dtbo ├── Projects worth trying ├── Try SDR on HackberryPi │ └── README.md ├── Turn HackberryPi into a Game Console │ └── README.md ├── Turn HackberryPi into a NAS │ └── README.md ├── Turn HackberryPi into a music streammer │ └── README.md ├── Turn HackberryPi into a portable laptop │ └── README.md └── Work with 1.28' ESP32 Devboard │ └── README.md ├── README.md ├── RTC-Battery └── README.md ├── Screen ├── README.md └── [Rpi Doc] Using-a-DPI-display.pdf ├── Speakers ├── 1507-Speaker-Datasheet.pdf ├── 1511-Speaker-Datasheet.pdf ├── Bluetooth Audio Module.png ├── MH-M18-datasheet.pdf ├── PAM8406-datasheet.pdf ├── PAM8406.png ├── README.md ├── Speaker-Layout.png └── Speaker_Circuit.png ├── USBHub └── README.md └── img ├── HackberryPi_CM5_Blueprint_Whiteline.png ├── HackberryPi_CM5_insideimage.png ├── HackberryPi_Logo.png └── HackberryPi_Q10.jpg /3D-Modell/9900 version/HackberryPi_CM5_9900_KeyboardSupport.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/9900 version/HackberryPi_CM5_9900_KeyboardSupport.STEP -------------------------------------------------------------------------------- /3D-Modell/9900 version/HackberryPi_CM5_9900_Keyboard_Support.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/9900 version/HackberryPi_CM5_9900_Keyboard_Support.stl -------------------------------------------------------------------------------- /3D-Modell/9900 version/HackberryPi_CM5_9900_Uppercase.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/9900 version/HackberryPi_CM5_9900_Uppercase.STEP -------------------------------------------------------------------------------- /3D-Modell/9900 version/HackberryPi_CM5_9900_Uppercase.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/9900 version/HackberryPi_CM5_9900_Uppercase.stl -------------------------------------------------------------------------------- /3D-Modell/Explosion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Explosion.png -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Displaysupport.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Displaysupport.STEP -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Displaysupport.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Displaysupport.STL -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Lowercase.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Lowercase.STEP -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Lowercase.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Lowercase.STL -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Middlepart.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Middlepart.STEP -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Middlepart.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Middlepart.STL -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_Redswitch.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_Redswitch.STL -------------------------------------------------------------------------------- /3D-Modell/HackberryPi_CM5_White_Screwtool.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/HackberryPi_CM5_White_Screwtool.STL -------------------------------------------------------------------------------- /3D-Modell/Q10 version/HackberryPi_CM5_Q10_KeyboardSupport.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q10 version/HackberryPi_CM5_Q10_KeyboardSupport.STEP -------------------------------------------------------------------------------- /3D-Modell/Q10 version/HackberryPi_CM5_Q10_Keyboard_Support.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q10 version/HackberryPi_CM5_Q10_Keyboard_Support.stl -------------------------------------------------------------------------------- /3D-Modell/Q10 version/HackberryPi_CM5_Q10_Toprowkeys_Support.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q10 version/HackberryPi_CM5_Q10_Toprowkeys_Support.stl -------------------------------------------------------------------------------- /3D-Modell/Q10 version/HackberryPi_CM5_Q10_uppercase.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q10 version/HackberryPi_CM5_Q10_uppercase.STEP -------------------------------------------------------------------------------- /3D-Modell/Q10 version/HackberryPi_CM5_Q10_uppercase.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q10 version/HackberryPi_CM5_Q10_uppercase.STL -------------------------------------------------------------------------------- /3D-Modell/Q20 version/HackberryPi_CM5_Q20_Keyboard_Support.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q20 version/HackberryPi_CM5_Q20_Keyboard_Support.STEP -------------------------------------------------------------------------------- /3D-Modell/Q20 version/HackberryPi_CM5_Q20_Keyboard_Support.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q20 version/HackberryPi_CM5_Q20_Keyboard_Support.STL -------------------------------------------------------------------------------- /3D-Modell/Q20 version/HackberryPi_CM5_Q20_Uppercase.STEP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q20 version/HackberryPi_CM5_Q20_Uppercase.STEP -------------------------------------------------------------------------------- /3D-Modell/Q20 version/HackberryPi_CM5_Q20_Uppercase.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/3D-Modell/Q20 version/HackberryPi_CM5_Q20_Uppercase.STL -------------------------------------------------------------------------------- /3D-Modell/README.md: -------------------------------------------------------------------------------- 1 | # 3D-Model of HackberryPi_CM5 2 | 3 | ![Explosion](https://github.com/user-attachments/assets/041b781a-63e6-457b-8e91-0a524fa4ed4c) 4 | 5 | # Details about certain parts 6 | 7 | The following parts are the same for all keyboard version: 8 | * HackberryPi_CM5_Displaysupport 9 | * HackberryPi_CM5_Lowercase 10 | * HackberryPi_CM5_Middlepart 11 | * HackberryPi_CM5_Redswitch 12 | 13 | What's different between different keyboard version: 14 | * Keyboard support 15 | * Uppercase 16 | 17 | Step file available for each structural part, feel free to modify them 18 | 19 | 20 | # Screws for HackberryPi_CM5 21 | 4 pcs M2x14 ```hexagon socket countersunk``` screws 22 | 2 pcs M2x4 ```Cup head hexagon``` screws 23 | -------------------------------------------------------------------------------- /Assembly/README.md: -------------------------------------------------------------------------------- 1 | ## Assembly Guidelines of the HackberryPi_CM5 2 | 3 | Assembly is straightforward: install the CM5 module, secure the heat sink,, here are the steps for the assembly 4 | 5 | 6 | ### Firstly, disassemble the back plate with the screw driver in the box 7 | ![image](https://github.com/user-attachments/assets/7b104ea4-0e25-42a2-87a7-8331de99e380) 8 | 9 | ### Secondly put the Compute module5 on the slot 10 | ![image](https://github.com/user-attachments/assets/3bb29381-14d2-434d-a372-9b2b1c0e18c4) 11 | 12 | ### Then use the white printed tool to secure the yellow screws 13 | ![image](https://github.com/user-attachments/assets/d07a4d60-4d26-4206-b65e-26ac93872374) 14 | ![image](https://github.com/user-attachments/assets/1803a0f1-7f5d-47a9-a144-54577faf5720) 15 | 16 | ### Don't forget this: Place the thermal silicone pad onto the CM5 module. 17 | ![image](https://github.com/user-attachments/assets/d82e1700-abcb-462e-9333-f6410813fed2) 18 | 19 | ### At last secure the heat sink with screws and lock the back plate. 20 | ![image](https://github.com/user-attachments/assets/650cfd96-d7de-4a42-bbd4-cd2389b7efec) 21 | ![image](https://github.com/user-attachments/assets/2c8f3c18-104d-44b0-bcc3-6b6f5a593201) 22 | 23 | Now it's OK to turn on the device and enjoy your time with it!!! 24 | -------------------------------------------------------------------------------- /Basic setup/README.md: -------------------------------------------------------------------------------- 1 | # Basic setup for HackberryPi_CM5 2 | 3 | ### How to make sound 4 | 5 | There is bluetooth speaker on board on HackberryPi_CM5, you need to pair with the bluetooth module on board to make sound. More detail please refer to this [page](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Speakers) 6 | -------------------------------------------------------------------------------- /Battery/105085-Air Transport-Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery/105085-Air Transport-Report.pdf -------------------------------------------------------------------------------- /Battery/IEC62133 Report-zrlk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery/IEC62133 Report-zrlk.pdf -------------------------------------------------------------------------------- /Battery/KC-Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery/KC-Report.pdf -------------------------------------------------------------------------------- /Battery/README.md: -------------------------------------------------------------------------------- 1 | # Battery on HackberryPi_CM5 2 | 3 | The battery used on HackberryPi_CM5 is Lipo battery with multiple certifications 4 | 5 | ```Dimension```: 83x50.5x10.1mm 6 | ```Capacity```: 5000mah @ 3.7V, 18.5Wh 7 | ```Battery Voltage```: 2.75-4.2V 8 | ```Weight```: 84.4g 9 | ```Connector```: PH2.0 2P 10 | ```Battery overcurrent protection```: 5A 11 | 12 | # Battery Foto 13 | ![image](https://github.com/user-attachments/assets/dd967207-a15c-49b6-8718-a3090722f99e) 14 | -------------------------------------------------------------------------------- /Battery/UL1642-Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery/UL1642-Report.pdf -------------------------------------------------------------------------------- /Battery/UN38.3-Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery/UN38.3-Report.pdf -------------------------------------------------------------------------------- /Battery_Voltage_Measure/MAX17048-Datasheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Battery_Voltage_Measure/MAX17048-Datasheet.pdf -------------------------------------------------------------------------------- /Battery_Voltage_Measure/README.md: -------------------------------------------------------------------------------- 1 | # Battery voltage measure on HackberryPi_CM5 2 | 3 | There is a microchip on board that can measure the current battery voltage called MAX17048. 4 | 5 | It communicates with the CM5 via I2C interface 6 | 7 | With the simple python code below the HackberryPi_CM5 can measure the current battery voltage for example in thonny 8 | ```sh 9 | import smbus2 10 | import time 11 | 12 | class MAX17048: 13 | def __init__(self, i2c_bus=11, i2c_address=0x36): 14 | self.bus = smbus2.SMBus(i2c_bus) 15 | self.address = i2c_address 16 | 17 | def read_voltage(self): 18 | try: 19 | # Read voltage registers (0x02 and 0x03) 20 | read = self.bus.read_i2c_block_data(self.address, 0x02, 2) 21 | 22 | # Combine the bytes and convert to voltage 23 | voltage_raw = (read[0] << 8) | read[1] 24 | voltage = voltage_raw * 0.078125 # 78.125μV per LSB 25 | 26 | return voltage / 1000 # Convert to volts 27 | 28 | except Exception as e: 29 | print(f"Error reading voltage: {e}") 30 | return None 31 | 32 | def close(self): 33 | self.bus.close() 34 | 35 | if __name__ == "__main__": 36 | max17048 = MAX17048() 37 | 38 | try: 39 | while True: 40 | voltage = max17048.read_voltage() 41 | if voltage is not None: 42 | print(f"Battery Voltage: {voltage:.2f} V") 43 | time.sleep(1) 44 | 45 | except KeyboardInterrupt: 46 | print("\nProgram stopped") 47 | max17048.close() 48 | ``` 49 | 50 | ![image](https://github.com/user-attachments/assets/55db79cd-ad6f-4a8d-9a4a-d0ffe60f7829) 51 | 52 | # Hardware 53 | 54 | This is the schematic of the battery voltage measure part on HackberryPi_CM5 55 | 56 | ![image](https://github.com/user-attachments/assets/a7473953-f248-4109-9d9c-d08dfec1d01e) 57 | 58 | The battery voltage measure chip and the screen’s touch controller are on the same I2C bus on HackberryPi_CM5. 59 | 60 | 61 | -------------------------------------------------------------------------------- /Battery_Voltage_Measure/get_battery_voltage.py: -------------------------------------------------------------------------------- 1 | import smbus2 2 | import time 3 | 4 | class MAX17048: 5 | def __init__(self, i2c_bus=11, i2c_address=0x36): 6 | self.bus = smbus2.SMBus(i2c_bus) 7 | self.address = i2c_address 8 | 9 | def read_voltage(self): 10 | try: 11 | # Read voltage registers (0x02 and 0x03) 12 | read = self.bus.read_i2c_block_data(self.address, 0x02, 2) 13 | 14 | # Combine the bytes and convert to voltage 15 | voltage_raw = (read[0] << 8) | read[1] 16 | voltage = voltage_raw * 0.078125 # 78.125μV per LSB 17 | 18 | return voltage / 1000 # Convert to volts 19 | 20 | except Exception as e: 21 | print(f"Error reading voltage: {e}") 22 | return None 23 | 24 | def close(self): 25 | self.bus.close() 26 | 27 | if __name__ == "__main__": 28 | max17048 = MAX17048() 29 | 30 | try: 31 | while True: 32 | voltage = max17048.read_voltage() 33 | if voltage is not None: 34 | print(f"Battery Voltage: {voltage:.2f} V") 35 | time.sleep(1) 36 | 37 | except KeyboardInterrupt: 38 | print("\nProgram stopped") 39 | max17048.close() -------------------------------------------------------------------------------- /External Antenna/README.md: -------------------------------------------------------------------------------- 1 | # External antenna on HackberryPi_CM5 2 | 3 | In my experiments, the signal from the PCB antenna on the Raspberry Pi CM5 module may not be ideal when a passive aluminum heatsink is installed. Therefore, adding an external antenna can sometimes enhance the signal strength of the CM5. 4 | The following are the installation steps: 5 | 6 | ### Install external antenna on HackberryPi_CM5 7 | 8 | ```Step1:``` Loosen the four screws on the back panel. 9 | ```Step2:``` Connect the external FPC antenna with a first-generation IPEX connector to the antenna socket on the Raspberry Pi CM5 board. 10 | ```Step3:``` Adjust the direction of the antenna to prevent interference with the enclosure, as shown in the picture: 11 | ```Step4:``` Add a line of code in the config.txt file by 12 | ```sh 13 | sudo nano /boot/firmware/config.txt 14 | ``` 15 | 16 | with the following line 17 | ```sh 18 | dtparam=ant2 19 | ``` 20 | Source: [CM5 datasheet](https://datasheets.raspberrypi.com/cm5/cm5-datasheet.pdf) 21 | Now you can have a better signal experience. 22 | 23 | #### You can buy the external antenna with HackberryPi_CM5 together on elecrow: 24 | [Buy from elecrow](https://www.elecrow.com/external-fpc-antenna-for-hackberrypi-cm5.html) 25 | -------------------------------------------------------------------------------- /Gallery/DHT20_Measure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Gallery/DHT20_Measure.png -------------------------------------------------------------------------------- /Gallery/Magnet_HackberryPi_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Gallery/Magnet_HackberryPi_1.png -------------------------------------------------------------------------------- /Gallery/README.md: -------------------------------------------------------------------------------- 1 | ### HackberryPi_CM5 get DHT20 reading 2 |

3 | HackberryPi_CM5_read_DHL20 4 |

5 | 6 | -------------------------------------------------------------------------------- /HackberryPi_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/HackberryPi_Logo.png -------------------------------------------------------------------------------- /Hardware/README.md: -------------------------------------------------------------------------------- 1 | # The key hardware design features of the HackberryPi_CM5 2 | 3 | * DPI display circuit: 40-pin Connector+Display backlight boost circuit: 3.3V->12V 4 | * Bluetooth speaker on board: Basically driverless between different operating system 5 | * Powersource: Powerbank SOC IP5310 provide 5V power + IP5306 for charging 6 | * Keyboard: Keyboard controller RP2040 and communicates with CM5 via USB interface 7 | * CM5 Slots: 2 x DF40C-100DS-0.4V(51) 8 | * Push-push out TF card Slot: quick change between different tf cards 9 | * 2 x USB 3.0 Ports: Use with high speed U-Disk 10 | * M.2 Slot on board: Boot on SSD or use with AI Kit 11 | * USB-KVM circuit for Keyboard: Make the device as emergency keyboard 12 | * Full size HDMI Port: No longer need for mini hdmi adapter! 13 | * Stemma QT port: Connect with I2C sensors 14 | * Battery voltage measure chip on board: Get the current battery voltage 15 | * Reserved fan connector 16 | 17 | # BOM file of HackberryPi_CM5 18 | 19 | Check the [ibom file](https://github.com/ZitaoTech/HackberryPiCM5/blob/main/Hardware/Bom_HackberryPi_CM5_Q20_rev0.html) of this page to review the component on HackberryPi_CM5 20 | ![image](https://github.com/user-attachments/assets/9dc0ef23-dd5d-40aa-aba6-14b0ed139410) 21 | -------------------------------------------------------------------------------- /Hardware/Schematic_HackberryPi_CM5_Q20.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Hardware/Schematic_HackberryPi_CM5_Q20.pdf -------------------------------------------------------------------------------- /I2C Port/DHT20.py: -------------------------------------------------------------------------------- 1 | 2 | import time 3 | import smbus2 4 | 5 | address = 0x38 # DHT20 I2C address 6 | 7 | # Initialize the I2C bus (usually bus 1 on Raspberry Pi) 8 | i2cbus = smbus2.SMBus(11) 9 | time.sleep(0.5) # Allow sensor to power up 10 | 11 | while True: 12 | # Read a status byte to check initialization 13 | data = i2cbus.read_i2c_block_data(address, 0x71, 1) 14 | if (data[0] | 0x08) == 0: 15 | print('Initialization error') 16 | else: 17 | # Trigger a measurement by writing the command 18 | i2cbus.write_i2c_block_data(address, 0xac, [0x33, 0x00]) 19 | time.sleep(0.1) # Give sensor time to perform measurement 20 | 21 | # Read 7 bytes of data from the sensor 22 | data = i2cbus.read_i2c_block_data(address, 0x71, 7) 23 | 24 | # Calculate raw temperature and convert to °C 25 | Traw = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5] 26 | temperature = 200 * float(Traw) / (2**20) - 50 27 | 28 | # Calculate raw humidity and convert to %RH 29 | Hraw = ((data[3] & 0xF0) >> 4) | (data[1] << 12) | (data[2] << 4) 30 | humidity = 100 * float(Hraw) / (2**20) 31 | 32 | print("Temperature: {:.2f}°C, Humidity: {:.2f}%".format(temperature, humidity)) 33 | 34 | # Wait for 1 second before the next reading 35 | time.sleep(1) 36 | -------------------------------------------------------------------------------- /I2C Port/README.md: -------------------------------------------------------------------------------- 1 | # I2C port on HackberryPi_CM5 2 | 3 | There is one stemma qt port on board, it can be used to communicate with other I2C interface sensor. 4 | 5 | Default I2C bus number on HackberryPi_CM5: 11 6 | 7 | ***Example:*** 8 | 9 | Use with DHT20 Sensor: 10 | 11 | 12 | ```sh 13 | 14 | import time 15 | import smbus2 16 | 17 | address = 0x38 # DHT20 I2C address 18 | 19 | # Initialize the I2C bus (usually bus 1 on Raspberry Pi) 20 | i2cbus = smbus2.SMBus(11) 21 | time.sleep(0.5) # Allow sensor to power up 22 | 23 | while True: 24 | # Read a status byte to check initialization 25 | data = i2cbus.read_i2c_block_data(address, 0x71, 1) 26 | if (data[0] | 0x08) == 0: 27 | print('Initialization error') 28 | else: 29 | # Trigger a measurement by writing the command 30 | i2cbus.write_i2c_block_data(address, 0xac, [0x33, 0x00]) 31 | time.sleep(0.1) # Give sensor time to perform measurement 32 | 33 | # Read 7 bytes of data from the sensor 34 | data = i2cbus.read_i2c_block_data(address, 0x71, 7) 35 | 36 | # Calculate raw temperature and convert to °C 37 | Traw = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5] 38 | temperature = 200 * float(Traw) / (2**20) - 50 39 | 40 | # Calculate raw humidity and convert to %RH 41 | Hraw = ((data[3] & 0xF0) >> 4) | (data[1] << 12) | (data[2] << 4) 42 | humidity = 100 * float(Hraw) / (2**20) 43 | 44 | print("Temperature: {:.2f}°C, Humidity: {:.2f}%".format(temperature, humidity)) 45 | 46 | # Wait for 1 second before the next reading 47 | time.sleep(1) 48 | 49 | ``` 50 | 51 | ![image](https://github.com/user-attachments/assets/3caa9f78-371d-4fdb-b5d3-b5066665f5d0) 52 | -------------------------------------------------------------------------------- /Keyboard/HackberryPi_CM5_9900.uf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Keyboard/HackberryPi_CM5_9900.uf2 -------------------------------------------------------------------------------- /Keyboard/HackberryPi_CM5_9900.vil: -------------------------------------------------------------------------------- 1 | {"version": 1, "uid": 4873506624522041283, "layout": [[["KC_BTN1", "KC_W", "KC_G", "KC_S", "KC_L", "KC_H"], ["KC_A", "KC_Q", "KC_R", "KC_E", "KC_O", "KC_U"], ["TD(0)", "KC_LALT", "KC_F", "KC_LCTRL", "KC_K", "KC_J"], ["TD(2)", "KC_SPACE", "KC_C", "KC_Z", "KC_M", "KC_N"], ["KC_LGUI", "MO(1)", "KC_T", "KC_D", "KC_I", "KC_Y"], ["TD(1)", "KC_LSHIFT", "KC_V", "KC_X", "LSFT(KC_4)", "KC_B"], [-1, -1, "MO(2)", "KC_P", "KC_BSPACE", "KC_ENTER"]], [["KC_BTN2", "KC_1", "KC_SLASH", "KC_4", "LSFT(KC_QUOTE)", "LSFT(KC_SCOLON)"], ["LSFT(KC_8)", "LSFT(KC_3)", "KC_3", "KC_2", "LSFT(KC_EQUAL)", "LSFT(KC_MINUS)"], ["KC_CAPSLOCK", "KC_0", "KC_6", "KC_LCTRL", "KC_QUOTE", "KC_SCOLON"], ["KC_PGDOWN", "KC_SPACE", "KC_9", "KC_7", "KC_DOT", "KC_COMMA"], ["KC_EXEC", "MO(1)", "LSFT(KC_9)", "KC_5", "KC_MINUS", "LSFT(KC_0)"], ["KC_PGUP", "KC_LSHIFT", "LSFT(KC_SLASH)", "KC_8", "KC_SCOLON", "LSFT(KC_1)"], [-1, -1, "MO(2)", "LSFT(KC_2)", "KC_DELETE", "KC_ENTER"]], [["KC_BTN1", "KC_UP", "KC_BSLASH", "KC_DOWN", "LSFT(KC_6)", "LSFT(KC_7)"], ["KC_LEFT", "LSFT(KC_BSLASH)", "KC_NO", "KC_NO", "LSFT(KC_BSLASH)", "LSFT(KC_COMMA)"], ["KC_F1", "KC_LALT", "KC_NO", "KC_LCTRL", "LSFT(KC_RBRACKET)", "LSFT(KC_LBRACKET)"], ["KC_F12", "KC_SPACE", "KC_NO", "KC_NO", "LSFT(KC_GRAVE)", "BL_INC"], ["KC_F5", "MO(1)", "KC_LBRACKET", "KC_RIGHT", "LSFT(KC_DOT)", "KC_RBRACKET"], ["KC_F11", "KC_LSHIFT", "BL_DEC", "KC_NO", "TD(3)", "BL_TOGG"], [-1, -1, "MO(2)", "KC_EQUAL", "KC_BSPACE", "KC_ENTER"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], [-1, -1, "KC_NO", "KC_NO", "KC_NO", "KC_NO"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], [-1, -1, "KC_NO", "KC_NO", "KC_NO", "KC_NO"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], [-1, -1, "KC_NO", "KC_NO", "KC_NO", "KC_NO"]]], "encoder_layout": [[], [], [], [], [], []], "layout_options": -1, "macro": [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], "vial_protocol": 6, "via_protocol": 9, "tap_dance": [["KC_CAPSLOCK", "KC_BTN1", "KC_NO", "KC_NO", 400], ["KC_ESCAPE", "KC_F4", "KC_NO", "KC_NO", 400], ["KC_TAB", "KC_BTN2", "KC_NO", "KC_NO", 400], ["LSFT(KC_4)", "KC_NO", "RESET", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200]], "combo": [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"]], "key_override": [{"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}], "settings": {"1": 0, "2": 50, "3": 0, "4": 175, "5": 5, "6": 5000, "7": 200, "8": 0, "9": 10, "10": 20, "11": 8, "12": 10, "13": 30, "14": 10, "15": 80, "16": 8, "17": 40, "18": 0, "19": 80, "20": 5, "21": 0}} -------------------------------------------------------------------------------- /Keyboard/HackberryPi_CM5_Q20.uf2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Keyboard/HackberryPi_CM5_Q20.uf2 -------------------------------------------------------------------------------- /Keyboard/HackberryPi_CM5_Q20.vil: -------------------------------------------------------------------------------- 1 | {"version": 1, "uid": 4873506624522041283, "layout": [[["KC_BTN1", "KC_W", "KC_G", "KC_S", "KC_L", "KC_H", -1], [-1, "KC_Q", "KC_R", "KC_E", "KC_O", "KC_U", -1], ["TD(0)", "KC_LALT", "KC_F", "KC_LCTRL", "KC_K", "KC_J", -1], [-1, "KC_SPACE", "KC_C", "KC_Z", "KC_M", "KC_N", -1], ["KC_LGUI", "MO(1)", "KC_T", "KC_D", "KC_I", "KC_Y", -1], ["TD(1)", "KC_LSHIFT", "KC_V", "KC_X", "LSFT(KC_4)", "KC_B", -1], [-1, "KC_A", "MO(2)", "KC_P", "KC_BSPACE", "KC_ENTER", -1], [-1, -1, -1, -1, -1, -1, "TD(2)"]], [["KC_BTN2", "KC_1", "KC_SLASH", "KC_4", "LSFT(KC_QUOTE)", "LSFT(KC_SCOLON)", -1], [-1, "LSFT(KC_3)", "KC_3", "KC_2", "LSFT(KC_EQUAL)", "LSFT(KC_MINUS)", -1], ["KC_CAPSLOCK", "KC_0", "KC_6", "KC_LCTRL", "KC_QUOTE", "KC_SCOLON", -1], [-1, "KC_SPACE", "KC_9", "KC_7", "KC_DOT", "KC_COMMA", -1], ["KC_EXEC", "MO(1)", "LSFT(KC_9)", "KC_5", "KC_MINUS", "LSFT(KC_0)", -1], ["KC_PGUP", "KC_LSHIFT", "LSFT(KC_SLASH)", "KC_8", "KC_SCOLON", "LSFT(KC_1)", -1], [-1, "LSFT(KC_8)", "MO(2)", "LSFT(KC_2)", "KC_DELETE", "KC_ENTER", -1], [-1, -1, -1, -1, -1, -1, "KC_PGDOWN"]], [["KC_BTN1", "KC_UP", "KC_BSLASH", "KC_DOWN", "LSFT(KC_6)", "LSFT(KC_7)", -1], [-1, "KC_BSLASH", "KC_NO", "KC_NO", "LSFT(KC_BSLASH)", "LSFT(KC_COMMA)", -1], ["KC_F1", "KC_LALT", "KC_NO", "KC_LCTRL", "LSFT(KC_RBRACKET)", "LSFT(KC_LBRACKET)", -1], [-1, "KC_SPACE", "KC_NO", "KC_NO", "LSFT(KC_GRAVE)", "BL_INC", -1], ["KC_F5", "MO(1)", "KC_LBRACKET", "KC_RIGHT", "LSFT(KC_DOT)", "KC_RBRACKET", -1], ["KC_F11", "KC_LSHIFT", "BL_DEC", "KC_NO", "TD(3)", "BL_TOGG", -1], [-1, "KC_LEFT", "MO(2)", "KC_EQUAL", "KC_BSPACE", "KC_ENTER", -1], [-1, -1, -1, -1, -1, -1, "KC_F12"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, -1, -1, -1, -1, -1, "KC_NO"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, -1, -1, -1, -1, -1, "KC_NO"]], [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, -1, -1, -1, -1, -1, "KC_NO"]]], "encoder_layout": [[], [], [], [], [], []], "layout_options": -1, "macro": [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []], "vial_protocol": 6, "via_protocol": 9, "tap_dance": [["KC_CAPSLOCK", "KC_BTN1", "KC_NO", "KC_NO", 200], ["KC_ESCAPE", "KC_F4", "KC_NO", "KC_NO", 400], ["KC_TAB", "KC_BTN2", "KC_NO", "KC_NO", 400], ["LSFT(KC_4)", "KC_NO", "RESET", "KC_NO", 400], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 400], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200]], "combo": [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"]], "key_override": [{"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}], "settings": {"1": 0, "2": 50, "3": 0, "4": 175, "5": 5, "6": 5000, "7": 200, "8": 0, "9": 10, "10": 20, "11": 8, "12": 10, "13": 30, "14": 10, "15": 80, "16": 8, "17": 40, "18": 0, "19": 5, "20": 5, "21": 0}} -------------------------------------------------------------------------------- /Keyboard/README.md: -------------------------------------------------------------------------------- 1 | # Keyboard on HackberryPi_CM5 2 | 3 | There are currently 3 versions of keyboards for HackberryPi_CM5: Q10 Q20 and 9900 keyboards 4 | 5 | Different keyboard has its own style 6 | 7 | * Q10: Q10 keyboard has linear layout and the keycap is slightly smaller than the Q20, the original Q10 keyboard has no top row keys and trackpad, I use the trackpad from 9900 and add another top row keys with PS game controller icon on it. 8 | * Q20: Q20 keyboard has linear layout and has the largest keycap, but there the trackpad on Q20 keyboard is the smallest and it has no backlight around the trackpad. 9 | * 9900: 9900 keyboard has ergonomic smile layout, the keycap is the smallest one. 10 | 11 | # Keyboard function on HackberryPi_CM5 12 | 13 | Each keyboard has the same keycap number and the trackpad can be used as mouse and also scroll wheel when capslock is enabled, when capslock is enabled the trackpad backlight on Q10 and 9900 will be lighted on while on Q20 the top row keys backlight will be lighted on. 14 | 15 | Each keyboard backlight can be adjusted with 10 steps. 16 | 17 | When hold Ctrl, mouse dpi /2 and while hold Alt, mouse dpix2. 18 | 19 | # How to use the .vil file? 20 | Let's say that you changed many keycodes and want to reset the keyboard layout 21 | First download vial app from [vial](https://get.vial.today/) homepage![image](https://github.com/user-attachments/assets/351fe201-cb4a-4483-83c8-f314ae1b860c) 22 | Install the vial app and open the app 23 | Then connect yor computer with Hackberry and in menu **file**->**Load saved layout** and select the .vil file, the keyboard layout will be reset. 24 | 25 | # Default Layout and Layers 26 | ### Layer0: 27 | ![Keymap_Layer0](https://github.com/user-attachments/assets/85eecbcd-65fe-4cdd-a51c-9182c82d6bc5) 28 | 29 | ### Layer 1: 30 | ![Keymap_Layer1](https://github.com/user-attachments/assets/28c5043a-dd23-416b-a23b-b14b5fdf9ce6) 31 | 32 | ### Layer 2: 33 | ![Keymap_Layer2](https://github.com/user-attachments/assets/221d4d2e-35c9-4349-9c26-a69c27b6d6a1) 34 | 35 | # Customize the keymap 36 | 37 | Thanks to the qmk firmware running on the keyboard, each key on HackberryPi_CM5 can be remapped on [vial app](https://get.vial.today/), just need to connect the HackberryPi with another computer via the usbc port below and flip the left switch and the keyboard output will be changed and the computer will recognize the keyboard on vial app. 38 | 39 | # Some features you can use in via app 40 | 41 | ### Tap dance 42 | You can set each key on the keyboard on each layer to trigger some keycode with single tap, double tap or hold in tapdance 43 | ![image](https://github.com/user-attachments/assets/9abfda2b-e50f-4dd1-bb3b-b38e9443e5ee) 44 | ![image](https://github.com/user-attachments/assets/906d2bc7-08cd-4536-8c16-bde581c5c4db) 45 | ### Macros 46 | You can use record function in vial app and output a lot of text using macros function 47 | ![image](https://github.com/user-attachments/assets/791de464-f01c-4d54-8314-c62dc13d63ad) 48 | For more information please refer to the user manual on [vial page](https://get.vial.today/manual/) 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Zitao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Magnet backplate/Magnet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Magnet backplate/Magnet.gif -------------------------------------------------------------------------------- /Magnet backplate/README.md: -------------------------------------------------------------------------------- 1 | # Magnet at the backplate on HackberryPi_CM5 2 | 3 | There is magnet at the backplate just like the one on iphone 4 | 5 | ![image](https://github.com/user-attachments/assets/c07c5bb7-2d91-4dc7-a61d-2579ee345388) 6 | 7 | With this magnet the HackberryPi_CM5 can be attatched to any phone stand compatible with Magsafe or powerbank 8 | 9 | ![Magnet backplate](https://github.com/ZitaoTech/HackberryPiCM5/blob/main/Magnet%20backplate/Magnet.gif) 10 | ![image](https://github.com/user-attachments/assets/002680ba-f358-4309-9d23-f26a194843cd) 11 | 12 | Where to buy the phone stand in the gif: 13 | [buy from elecrow](https://www.elecrow.com/phone-stand-for-hackberrypi-cm5.html) 14 | -------------------------------------------------------------------------------- /Mechnical_Drawing/HackberryPi_CM5_mechanical_drawing.DWG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Mechnical_Drawing/HackberryPi_CM5_mechanical_drawing.DWG -------------------------------------------------------------------------------- /Mechnical_Drawing/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Mechnical_Drawing/README.md -------------------------------------------------------------------------------- /NVME Slot/Enable PCIE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/Enable PCIE.png -------------------------------------------------------------------------------- /NVME Slot/Format.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/Format.png -------------------------------------------------------------------------------- /NVME Slot/New Partition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/New Partition.png -------------------------------------------------------------------------------- /NVME Slot/README.md: -------------------------------------------------------------------------------- 1 | # NVME Slot on HackberryPi_CM5 2 | 3 | There is an NVME Slot on board which is only compatible with 2242 ssd or hailo 8 AI accelerator card. 4 | ![image](https://github.com/user-attachments/assets/70425743-f175-4eb6-a6be-5a03c525eecf) 5 | There are many types of ssd that are not compatible with RaspberryPi, it is recommended to buy the ssd directly from shop of elecrow: 6 | 7 | 8 | ## Use SSD with HackberryPi_CM5 9 | 10 | ### Enable PCIe 11 | First enable PCIe Interface, note: PCIE interface is enabled on the PI5B by default. 12 | If the PCIE interface is not enabled, you add the following content in "/boot/firmware/config.txt" by typing ```sudo nano /boot/firmware/config.txt``` in a terminal: 13 | ```sh 14 | dtparam=pciex1 15 | ``` 16 | at [all] section 17 | 18 | The default mode of PCIe is gen2. If you need to enable PCIe Gen3, you need to add the following content at /boot/firmware/config.txt: 19 | ```sh 20 | dtparam=pciex1_gen=3 21 | ``` 22 | at [all] section 23 | 24 | Now the ```config.txt``` file will look like this: 25 | ![image](https://github.com/user-attachments/assets/4eaf41f2-989e-48ca-8308-74255f591d27) 26 | 27 | Now make a ```sudo reboot``` and type ```lsblk``` The SSD should be recognized by the Pi: 28 | ![image](https://github.com/user-attachments/assets/da639e70-392c-4627-a9c4-45de4356bc23) 29 | 30 | ### Partition 31 | ```sh 32 | sudo fdisk /dev/nvme0n1 33 | ``` 34 | Execute n to add the partition, and then just type enter enter enter until a new partition is created, and then execute w to save and exit. 35 | ![3e1775b2937b64a7e02af512a7da948c](https://github.com/user-attachments/assets/efba3dd9-927c-44ab-b508-64ea986d3372) 36 | 37 | ### Format 38 | ```sh 39 | sudo mkfs.vfat -F 32 /dev/nvme0n1p1 40 | ``` 41 | Wait for a few moments, when done has appeared, it means that the formatting has been carried out. 42 | ![1a0374a7-da44-4201-9268-f5ef6763b0c1](https://github.com/user-attachments/assets/59d68cfb-bc9b-4627-8ab2-7d934cb8fa68) 43 | 44 | ### Mount 45 | Create Mount Directory(Use any name) 46 | ```sh 47 | sudo mkdir ssd 48 | ``` 49 | Mount the device 50 | ```sh 51 | sudo mount /dev/nvme0n1p1 ./ssd 52 | ``` 53 | Checking disk status 54 | ```sh 55 | df -h 56 | ``` 57 | ![image](https://github.com/user-attachments/assets/05d913d4-3291-43b4-b47a-c9829f42b60f) 58 | 59 | ## Read/Write Test 60 | Enter the directory where the disk is mounted: 61 | ```sh 62 | cd ssd 63 | ``` 64 | Write test 65 | ```sh 66 | sudo dd if=/dev/zero of=./test_write count=2000 bs=1024k 67 | ``` 68 | Read Test 69 | ```sh 70 | sudo dd if=./test_write of=/dev/null count=2000 bs=1024k 71 | ``` 72 | Note: Different cards and environments make different test results. As the Raspberry Pi is more vulnerable to being affected, if you want to test the exact performance, you can use a PC to test. 73 | ![image](https://github.com/user-attachments/assets/6898ba8f-9f83-42ca-b039-fdb53ec3016c) 74 | 75 | ## Auto-Mounting 76 | If the testing is sound and you don't need it as a system disk and only use an extended disk, you can set up an automatic mounting. 77 | ```sh 78 | sudo nano /etc/fstab 79 | ``` 80 | #Add the following content at the end: 81 | ```sh 82 | /dev/nvme0n1p1 /home/pi/ssd ext4 defaults 0 0 83 | ``` 84 | #/dev/nvme0n1p1 is the device name, /home/pi/ssd is the directory to be mounted, ext4 is the file system type, defaults are using the default mounting setting 85 | Make the modification take effect (make sure the test is sound before rebooting, otherwise it will lead to failure to mount or boot; if it cannot boot, you can remove the content added in /etc/fstab) 86 | ```sh 87 | sudo mount -a 88 | ``` 89 | You should see an external disk on the desktop after reboot 90 | 91 | ## Booting from NVMe SSD 92 | Open Menu->Accessories->SD card Copier. 93 | ![image](https://github.com/user-attachments/assets/7ccde86f-81f4-400d-90f2-17856608acf7) 94 | Copy the image from SD card to SSD: 95 | ![image](https://github.com/user-attachments/assets/c34ebdf6-002e-4a6a-beb8-bac9ac4a08d4) 96 | Wait a few moment until the copying is finished. 97 | ![image](https://github.com/user-attachments/assets/01d3ec06-4dac-4cd3-84e6-d3568cfc96b1) 98 | 99 | 100 | Then 101 | ```sh 102 | sudo rpi-eeprom-config --edit 103 | ``` 104 | Modify BOOT_ORDER=0xf41 as BOOT_ORDER=0xf416 105 | ![image](https://github.com/user-attachments/assets/d105ebac-e58d-4332-8f2d-8bdc8c2243dd) 106 | 107 | 108 | Remove the tf card and reboot the HackberryPi then the system should be rebooted from the SSD, it's about 10 seconds faster than booting from tf card(RaspberryPi OS) 109 | 110 | -------------------------------------------------------------------------------- /NVME Slot/ReadWrite Test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/ReadWrite Test.png -------------------------------------------------------------------------------- /NVME Slot/SD card copier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/SD card copier.png -------------------------------------------------------------------------------- /NVME Slot/SSD recognize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/NVME Slot/SSD recognize.png -------------------------------------------------------------------------------- /Operating System/Kali/README.md: -------------------------------------------------------------------------------- 1 | # Install Kali on HackberryPi_CM5 2 | 3 | ### Kali Linux is a Linux distribution designed for digital forensics and penetration testing. It is maintained and funded by Offensive Security. 4 | 5 | ```Step1```Download and install the kali image from pi imager into a tf card```Main Menu-> other specfic purpose os->kali linux``` 6 | ```Step2``` Copy the following content into the config.txt and override 7 | ```Step3``` Insert the TF card into the HackberryPi_CM5 and power it on, wait a few seconds and you can see it booting 8 | 9 | Compared with other operating system, it's just needed to delete the vms, because the .... is currently not likely to be supported in kali os. 10 | 11 | 12 | ```sh 13 | # http://rptl.io/configtxt 14 | # Some settings may impact device functionality. See link above for details 15 | 16 | # Uncomment some or all of these to enable the optional hardware interfaces 17 | #dtparam=i2c_arm=on 18 | #dtparam=i2s=on 19 | #dtparam=spi=on 20 | 21 | # Enable audio (loads snd_bcm2835) 22 | dtparam=audio=on 23 | 24 | # Additional overlays and parameters are documented 25 | # /boot/firmware/overlays/README 26 | 27 | # Automatically load overlays for detected cameras 28 | camera_auto_detect=1 29 | 30 | # Automatically load overlays for detected DSI displays 31 | display_auto_detect=1 32 | 33 | # Automatically load initramfs files, if found 34 | auto_initramfs=1 35 | 36 | # Enable DRM VC4 V3D driver 37 | #dtoverlay=vc4-kms-v3d 38 | #max_framebuffers=2 39 | # Don't have the firmware create an initial video= setting in cmdline.txt. 40 | # Use the kernel's default instead. 41 | disable_fw_kms_setup=1 42 | 43 | # Disable compensation for displays with overscan 44 | disable_overscan=1 45 | 46 | # Run as fast as firmware / board allows 47 | arm_boost=1 48 | 49 | [cm4] 50 | # Enable host mode on the 2711 built-in XHCI USB controller. 51 | # This line should be removed if the legacy DWC2 controller is required 52 | # (e.g. for USB device mode) or if USB support is not required. 53 | otg_mode=1 54 | 55 | [cm5] 56 | dtoverlay=dwc2,dr_mode=host 57 | 58 | [all] 59 | dtoverlay=dwc2,dr_mode=host 60 | dtoverlay=vc4-kms-dpi-hyperpixel4sq 61 | 62 | 63 | ``` 64 | 65 | ![image](https://github.com/user-attachments/assets/7e2cc7c9-229a-4705-bc1a-f41f50b99973) 66 | 67 | ⚠️ **Note:** 68 | 69 | Bluetooth may not be enabled by default in Kali on current version of Kali. You need to enable it manually, here are the steps: 70 | 71 | ```sh 72 | sudo apt install blueman 73 | ``` 74 | and then 75 | ```sh 76 | sudo systemctl enable bluetooth.service 77 | ``` 78 | Then you can connect with the speakers and use bluetooth on HackberryPi_CM5 in Kali 79 | -------------------------------------------------------------------------------- /Operating System/Manjaro/README.md: -------------------------------------------------------------------------------- 1 | # Install Manjaro on HackberryPi_CM5 2 | 3 | ### Manjaro is a free and open-source Linux distribution based on the Arch Linux operating system that has a focus on user-friendliness and accessibility. 4 | 5 | ```Step1``` Download the Release Image for RaspberryPi on this [page](https://github.com/manjaro-arm/rpi4-images/releases). Although it's labeled as pi4, you can still install the OS on pi5 and should run without issue. For example we can choose Manjaro with plasma desktop 6 | ![image](https://github.com/user-attachments/assets/77511ebb-c6fc-4556-9b0b-dbe8d535705a) 7 | ```Step2``` Flash the downloaded image into a TF card 8 | ```Step3``` Copy the following content into the config.txt and override 9 | ```Step4``` Insert the TF card into the HackberryPi_CM5 and power it on, wait a few seconds and you can see it booting 10 | 11 | ```sh 12 | # See /boot/overlays/README for all available options 13 | 14 | # Uncomment some or all of these to enable optional Hardware interfaces 15 | #dtparam=i2c_arm=on 16 | #dtparam=i2s=on 17 | #dtparam=spi=on 18 | 19 | # Run in 64bit mode 20 | arm_64bit=1 21 | 22 | # Auto load correct initramfs files if found 23 | auto_initramfs=1 24 | 25 | # Run as fast as the firmware/board allows 26 | arm_boost=1 27 | 28 | # Disable compensation for displays with overscan 29 | disable_overscan=1 30 | 31 | # Enable sound 32 | dtparam=audio=on 33 | # Uncomment if no sound thru hdmi 34 | #hdmi_drive=2 35 | 36 | # Auto load overlays for detected cameras 37 | camera_auto_detect=1 38 | # Auto load overlays for detected DSI displays 39 | display_auto_detect=1 40 | 41 | # Enable DRM VC4 V3D driver 42 | dtoverlay=vc4-kms-v3d 43 | # For pi4's and above boards uncomment next line & Comment out above line 44 | #dtoverlay=vc4-kms-v3d,cma-512 45 | max_framebuffers=2 46 | 47 | # Don't have the firmware create an initial video= setting in cmdline.txt 48 | # Use the kernel default instead 49 | #disable_fw_kms_setup=1 50 | 51 | # Disable rainbow screen at boot 52 | disable_splash=1 53 | 54 | # RPi 5B/4B/400 ONLY 55 | # For 4k content @ 60 Hz refresh rate, uncomment hdmi_enable_4kp60=1 56 | #hdmi_enable_4kp60=1 57 | # If video breaks with hdmi_enable_4kp60=1 uncomment 58 | #force_turbo=1 59 | 60 | 61 | [cm4] 62 | # Enable host mode on the 2711 built-in XHCI USB controller 63 | # This line should be remoed if the legacy DWC2 controller is required 64 | otg_mode=1 65 | 66 | [cm5] 67 | dtoverlay=dwc2,dr_mode=host 68 | 69 | [all] 70 | dtoverlay=dwc2,dr_mode=host 71 | dtoverlay=vc4-kms-v3d 72 | dtoverlay=vc4-kms-dpi-hyperpixel4sq 73 | ``` 74 | ![f6f5cfc7bf51e22420ad9562048b33e](https://github.com/user-attachments/assets/50c78d32-e169-4337-be83-55a8846ea0a2) 75 | 76 | ⚠️ 77 | ### Note: It seems by default the image on screen is set at 275% scale. You might need to connect to an external HDMI display to reset the scale on Manjaro 78 | -------------------------------------------------------------------------------- /Operating System/ParrotOS/README.md: -------------------------------------------------------------------------------- 1 | # Install ParrotOS on HackberryPi_CM5 2 | 3 | ### Parrot OS is a Linux distribution based on Debian with a focus on security, privacy, and development. 4 | 5 | ```Step1``` Download the Image for RaspberryPi on this [page](https://parrotsec.org/download/) 6 | ```Step2``` Flash the downloaded image into a TF card 7 | ```Step3``` Copy the following content into the config.txt and override 8 | ```Step4``` Insert the TF card into the HackberryPi_CM5 and power it on, wait a few seconds and you can see it booting 9 | 10 | 11 | 12 | ```sh 13 | # For more options and information see 14 | # http://rptl.io/configtxt 15 | # Some settings may impact device functionality. See link above for details 16 | 17 | # Uncomment some or all of these to enable the optional hardware interfaces 18 | #dtparam=i2c_arm=on 19 | #dtparam=i2s=on 20 | #dtparam=spi=on 21 | 22 | # Enable audio (loads snd_bcm2835) 23 | dtparam=audio=on 24 | 25 | # Additional overlays and parameters are documented 26 | # /boot/firmware/overlays/README 27 | 28 | # Automatically load overlays for detected cameras 29 | camera_auto_detect=1 30 | 31 | # Automatically load overlays for detected DSI displays 32 | display_auto_detect=1 33 | 34 | # Automatically load initramfs files, if found 35 | auto_initramfs=1 36 | 37 | # Enable DRM VC4 V3D driver 38 | dtoverlay=vc4-kms-v3d 39 | max_framebuffers=2 40 | 41 | # Don't have the firmware create an initial video= setting in cmdline.txt. 42 | # Use the kernel's default instead. 43 | disable_fw_kms_setup=1 44 | 45 | # Run in 64-bit mode 46 | arm_64bit=1 47 | 48 | # Disable compensation for displays with overscan 49 | disable_overscan=1 50 | 51 | # Run as fast as firmware / board allows 52 | arm_boost=1 53 | 54 | [cm4] 55 | # Enable host mode on the 2711 built-in XHCI USB controller. 56 | # This line should be removed if the legacy DWC2 controller is required 57 | # (e.g. for USB device mode) or if USB support is not required. 58 | otg_mode=1 59 | 60 | [all] 61 | dtoverlay=dwc2,dr_mode=host 62 | dtoverlay=vc4-kms-v3d 63 | dtoverlay=vc4-kms-dpi-hyperpixel4sq 64 | 65 | ``` 66 | 67 | You can type ```startx``` in terminal to enter desktop environment 68 | 69 | ![image](https://github.com/user-attachments/assets/c2be8186-bf20-4923-9fe9-21f9eb4ba194) 70 | -------------------------------------------------------------------------------- /Operating System/README.md: -------------------------------------------------------------------------------- 1 | # Install different operating system on HackberryPi_CM5 2 | 3 | There are many different OS that you can install on HackberryPi_CM5. They are basically those OS that support RaspberryPi5 Serie. 4 | But note that RaspberryPi5 or BCM2712 is relativly a new chip. Some OS may have not enough support for Pi5 like Kali. 5 | 6 | ### On this page, there are many folders that will tell you how to install the driver for this screen on these operating systems. 7 | 8 | ### If you want to try other OS that is not mentioned in this page. You can try the normal way listed below: 9 | 10 | ```Step1``` Download the ```vc4-kms-dpi-hyperpixel4sq.dtbo``` and ```hyperpixel4.dtbo``` file in this page 11 | ```Step2``` Put the two files into the ```/overlay/``` folder of the image disk 12 | ```Step3``` Copy and paste the following lines into the ```/boot/config.txt``` 13 | ```sh 14 | dtoverlay=vc4-kms-v3d 15 | dtoverlay=vc4-kms-dpi-hyperpixel4sq 16 | ``` 17 | In this way, you have installed the screen driver on this operating system and invoked it. 18 | Unless this operating system does not support the Pi 5, it should generally be able to display the image on this screen. 19 | 20 | ### Also note that the default hardware I2C and SPI gpios are used for the display. So remember to disable them in the OS 21 | -------------------------------------------------------------------------------- /Operating System/RaspberryPi_OS/README.md: -------------------------------------------------------------------------------- 1 | # Install RaspberryPi OS on HackberryPi_CM5 2 | 3 | ### RaspberryPi OS has the most support among other OS for different RaspberryPi SBCs, it is recommended to install RaspberryPi OS on HackberryPi_CM5 4 | -------------------------------------------------------------------------------- /Operating System/Ubuntu/README.md: -------------------------------------------------------------------------------- 1 | # Install Ubuntu on HackberryPi_CM5 2 | 3 | ### Ubuntu is a Linux distribution derived from Debian and composed mostly of free and open-source software 4 | 5 | ⚠️⚠️⚠️ 6 | ## Note: Ubuntu is currently not supported on the Raspberry Pi CM5. Installing Ubuntu may result in system crashes. There might be kernel patches in the future to fix this. However, you can display the system image using the following method: 7 | 8 | 9 | ```Step1``` Download the Ubuntu image from the pi imager(main folder-> other general-purpose OS-> Ubuntu) 10 | ```Step2``` Copy the following content into the config.txt and override 11 | ```Step3``` Insert the TF card into the HackberryPi_CM5 and power it on, wait a few seconds and you can see it booting 12 | 13 | 14 | ```sh 15 | [all] 16 | arm_64bit=1 17 | kernel=vmlinuz 18 | cmdline=cmdline.txt 19 | initramfs initrd.img followkernel 20 | 21 | # Enable the audio output, I2C and SPI interfaces on the GPIO header. As these 22 | # parameters related to the base device-tree they must appear *before* any 23 | # other dtoverlay= specification 24 | dtparam=audio=on 25 | #dtparam=i2c_arm=off 26 | #dtparam=spi=off 27 | 28 | # Comment out the following line if the edges of the desktop appear outside 29 | # the edges of your display 30 | disable_overscan=1 31 | 32 | # If you have issues with audio, you may try uncommenting the following line 33 | # which forces the HDMI output into HDMI mode instead of DVI (which doesn't 34 | # support audio output) 35 | #hdmi_drive=2 36 | 37 | # Enable the KMS ("full" KMS) graphics overlay, leaving GPU memory as the 38 | # default (the kernel is in control of graphics memory with full KMS) 39 | dtoverlay=vc4-kms-v3d 40 | disable_fw_kms_setup=1 41 | 42 | # Autoload overlays for any recognized cameras or displays that are attached 43 | # to the CSI/DSI ports. Please note this is for libcamera support, *not* for 44 | # the legacy camera stack 45 | camera_auto_detect=1 46 | display_auto_detect=1 47 | 48 | # Config settings specific to arm64 49 | dtoverlay=dwc2 50 | 51 | [pi4] 52 | max_framebuffers=2 53 | arm_boost=1 54 | 55 | [pi3+] 56 | # Use a smaller contiguous memory area, specifically on the 3A+ to avoid an 57 | # OOM oops on boot. The 3B+ is also affected by this section, but it shouldn't 58 | # cause any issues on that board 59 | dtoverlay=vc4-kms-v3d,cma-128 60 | 61 | [pi02] 62 | # The Zero 2W is another 512MB board which is occasionally affected by the same 63 | # OOM oops on boot. 64 | dtoverlay=vc4-kms-v3d,cma-128 65 | 66 | [cm4] 67 | # Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into 68 | # such a board) 69 | dtoverlay=dwc2,dr_mode=host 70 | 71 | [all] 72 | dtoverlay=dwc2,dr_mode=host 73 | dtoverlay=vc4-kms-v3d 74 | dtoverlay=vc4-kms-dpi-hyperpixel4sq 75 | ``` 76 | ![image](https://github.com/user-attachments/assets/3ee45c39-7f7b-4a17-9fb0-ba4bc1ffa9c9) 77 | -------------------------------------------------------------------------------- /Operating System/hyperpixel4.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Operating System/hyperpixel4.dtbo -------------------------------------------------------------------------------- /Operating System/vc4-kms-dpi-hyperpixel4sq.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Operating System/vc4-kms-dpi-hyperpixel4sq.dtbo -------------------------------------------------------------------------------- /Projects worth trying/Try SDR on HackberryPi/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Projects worth trying/Try SDR on HackberryPi/README.md -------------------------------------------------------------------------------- /Projects worth trying/Turn HackberryPi into a Game Console/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Projects worth trying/Turn HackberryPi into a Game Console/README.md -------------------------------------------------------------------------------- /Projects worth trying/Turn HackberryPi into a NAS/README.md: -------------------------------------------------------------------------------- 1 | https://www.pcmag.com/how-to/how-to-turn-a-raspberry-pi-into-a-nas-for-whole-home-file-sharing -------------------------------------------------------------------------------- /Projects worth trying/Turn HackberryPi into a music streammer/README.md: -------------------------------------------------------------------------------- 1 | https://www.headphonesty.com/2021/04/how-to-build-raspberry-pi-network-music-streamer-with-touchscreen/ 2 | -------------------------------------------------------------------------------- /Projects worth trying/Turn HackberryPi into a portable laptop/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Projects worth trying/Turn HackberryPi into a portable laptop/README.md -------------------------------------------------------------------------------- /Projects worth trying/Work with 1.28' ESP32 Devboard/README.md: -------------------------------------------------------------------------------- 1 | # Work with 1.28' ESP32 Devboard 2 | 3 | We all know that HackberryPi is a cyberdeck handheld with form factor like a cellphone with physical keyboard. Sometimes it would be very interesting to add some tiny extend display or devboard based on ESP32 or RP2040 chip. 4 | In my point of view, devboard based on ESP32 would perfectly match this because ESP32 is a microcontroller with Bluetooth and Wifi module. 5 | 6 | Here is an example 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Redox logo 3 |

4 | 5 |

The HackberryPi_CM5 project repository

6 | 7 |
8 | 9 | [![Status](https://img.shields.io/badge/status-active-success.svg)]() 10 | [![GitHub Issues](https://img.shields.io/github/issues/zitaotech/HackberryPiCM5.svg)](https://github.com/ZitaoTech/HackberryPiCM5/issues) 11 | [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/zitaotech/HackberryPiCM5.svg)](https://github.com/ZitaoTech/HackberryPiCM5/pulls) 12 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE) 13 | 14 |
15 | 16 | --- 17 | 18 | The HackberryPi_CM5 project is a RaspberryPi Compute Module SBC(single board computer) powered handheld computer with reuse of original keyboard from old Blackberry phones. The goal of the project is to create a portable linux-powered computer that lets the user gain a deeper understanding of Linux and explore the architecture of hardware, software, and the Linux kernel. This repository will be used to share information about the project and tutorial about how to make use of this device. 19 | 20 |

21 | HackberryPi_CM5 22 |

23 | 24 | **Designer's bio**: Zitao, currently a master’s student in Mechanical Engineering and Industrial Design at the Technical University of Dresden, Germany 25 | 26 |
27 | 28 | [Questions or need more info? Join my Discord Channel!](https://discord.gg/WzPthAmMbP) 29 | 30 |
31 | 32 | # Dimension and weight 33 | **Overall dimensions:** 143.5x91.8x17.6mm 34 | **Weight:** 306 Gramm(with battery,cm5 and heat sink) 35 | Upper and lower case made of aluminium 36 | Middle part 3d printed 37 |

38 | HackberryPi_CM5_Blueprint 39 |

40 | And this is how it looks like inside the device: 41 |

42 | HackberryPi_CM5_inside 43 |

44 | 45 | # About this Device 46 | 47 | | **Feature** | **Details** | 48 | |-------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------| 49 | | **SBC** | Only compatible with Raspberry Pi CM5. [CM5 Datasheet](https://datasheets.raspberrypi.com/cm5/cm5-datasheet.pdf) | 50 | | **CPU** | BCM2712, quad-core Cortex-A76 (ARMv8) 64-bit SoC @ 2.4GHz | 51 | | **Dual Speakers** | Dual speakers connected via Bluetooth. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Speakers) | 52 | | **2242 NVME Slot** | Supports 2242 SSD or Halio AI accelerator card. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/NVME%20Slot) | 53 | | **RTC Battery** | CR927 battery slot for RTC functionality. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/RTC-Battery) | 54 | | **Metal Body** | Aluminium front and back plate; 3D-printed middle section | 55 | | **Display** | 4" 720x720 high-resolution TFT with multi-touch | 56 | | **USB Ports** | 2x USB 3.0 ports | 57 | | **HDMI Port** | One full-sized HDMI port | 58 | | **Battery Type** | 5000mAh LiPo battery. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Battery) | 59 | | **Battery Life** | ~5 hours idle, 3–4 hours typical usage | 60 | | **Battery Voltage Measurement** | I2C-based battery voltage measurement. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Battery_Voltage_Measure) | 61 | | **Magnet on Back Plate** | Built-in magnet compatible with iPhone-style wired MagSafe power banks. [More information](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Magnet%20backplate) | 62 | | **Keyboard Mouse Combo** | On-board combo; supports BlackBerry Q10, Q20, or 9900 keyboard | 63 | | **Custom Keymap** | Configurable via [VIAL](https://get.vial.today/). [More information](https://github.com/ZitaoTech/HackberryPiCM5) | 64 | | **Charging Rate** | 1.5A–2A via Type-C; full charge in 2–3 hours | 65 | | **Stemma I2C Port** | On-board Stemma I2C port for external sensors | 66 | 67 | # 3D model 68 | In this page you can find the 3D model of each part of this device, you can print or modify the part yourself. 69 | * [3D model about this device](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/3D-Modell) 70 | 71 | # Assembly Guidelines 72 | The HackberryPi_CM5 comes without the CM5 unit. Generally, you only need to install the CM5 and the passive heatsink on top. For details, please refer to this page. 73 | * [Assembly Guidelines](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Assembly) 74 | 75 | # Hardware 76 | This page offers an in-depth hardware overview of the HackberryPi_CM5, designed to guide anyone interested in creating an adapter board for the CM5 module, exploring the keyboard’s hardware architecture, and related concepts. For more details, please visit this page. 77 | * [Hardware](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Hardware) 78 | 79 | # Speakers 80 | There are dual speakers on board, it is needed to pair with the bluetooth audio module to make sound for more information please refer to this page. 81 | * [Pair with speakers](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Speakers#pair-with-the-speakers) 82 | 83 | # External antenna 84 | Because of the metall case and the mounted heat sink, the performance of the original PCB antenna might be a little bit disappointing. This page can tell you how to assemble an external antenna; 85 | * [External antenna](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/External%20Antenna) 86 | 87 | # Gallery 88 | For more photos of the HackberryPi_CM5, please refer to this page. 89 | * [Gallery](https://github.com/ZitaoTech/HackberryPiCM5/tree/main/Gallery) 90 | 91 | # Where to buy 92 | * [Buy from elecrow](https://www.elecrow.com/catalogsearch/result/?q=HackberryPi_CM5) 93 | 94 | # Short video 95 | * [Tiktok: Mr.Hackberry(One friend of mine)](https://www.tiktok.com/@mr.hackberry_pi) 96 | -------------------------------------------------------------------------------- /RTC-Battery/README.md: -------------------------------------------------------------------------------- 1 | # RTC_Battery on HackberryPi_CM5 2 | 3 | There is an RTC battery on board on HackberryPi_CM5 and is pre-installed before delivery 4 | 5 | ![image](https://github.com/user-attachments/assets/f9ec7797-bb5f-4f07-8b85-8a5f66d573b0) 6 | 7 | 8 | You can check the battery voltage first by typing this in terminal: 9 | 10 | ```sh 11 | cat /sys/devices/platform/soc/soc:rpi_rtc/rtc/rtc0/battery_voltage 12 | ``` 13 | ![image](https://github.com/user-attachments/assets/2b21954b-3a8b-4bb2-adc6-bddab41c39dc) 14 | 15 | A new battery voltage should be around 3.3V, so it read should be approximately 3300000 16 | -------------------------------------------------------------------------------- /Screen/README.md: -------------------------------------------------------------------------------- 1 | # Screen on HackberryPi_CM5 2 | 3 | Thanks to raspberrypi fundation that they leave dpi interface on each RaspberryPi, this gives the chance for the pi to drive normal rgb display very easily. More information please check the doc in this page. 4 | 5 | On HackberryPi_CM5 there is a 3.95 inch 720*720 resolution RGB666 display on board. 6 | 7 | The hardware needed is basically a fpc connector for the display and the backlight light boost circuit to drive 3.3V to around 12V to drive the backlight LEDs. 8 | -------------------------------------------------------------------------------- /Screen/[Rpi Doc] Using-a-DPI-display.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Screen/[Rpi Doc] Using-a-DPI-display.pdf -------------------------------------------------------------------------------- /Speakers/1507-Speaker-Datasheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/1507-Speaker-Datasheet.pdf -------------------------------------------------------------------------------- /Speakers/1511-Speaker-Datasheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/1511-Speaker-Datasheet.pdf -------------------------------------------------------------------------------- /Speakers/Bluetooth Audio Module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/Bluetooth Audio Module.png -------------------------------------------------------------------------------- /Speakers/MH-M18-datasheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/MH-M18-datasheet.pdf -------------------------------------------------------------------------------- /Speakers/PAM8406-datasheet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/PAM8406-datasheet.pdf -------------------------------------------------------------------------------- /Speakers/PAM8406.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/PAM8406.png -------------------------------------------------------------------------------- /Speakers/README.md: -------------------------------------------------------------------------------- 1 | # Speakers on HackberryPi_CM5 2 | 3 | As we know, it's always been somehow difficult or tricky to add sound for RaspberryPi. Some use gpio to generate pwm to make sound for speakers, some use I2S audio module to generate sound for speakers. But they all have some shortcomings. PWM generated from gpios on raspberryPi have much noise that make the speakers nealy usable, and I2S audio module will occupy the very precious gpio resoureces(usually take 3 gpio pins). And in some operating system there is no driver for these pwm or I2S audio module. Due to the reasons above this is how I solve the sound problem. 4 | 5 | ## Bluetooth speakers on board 6 | 7 | This is how I add sound on HackberryPi_CM5: Integrating a bluetooth speaker on board. 8 | 9 | 10 | **Advantages**: 11 | 12 | 13 | **No gpio needed**: The SBC communicates with the audio module via bluetooth so there is no gpio needed. 14 | **Driverless**: As long as your operating system installed have bluetooth driver, you can pair with the speaker and no external driver needed. 15 | **Good sound quality**: As long as the power source for the bluetooth audio module clear is, the sound quality is good. 16 | **Cheap cost**: compared with some USB solution, the bluetooth audio module is moch more cheaper. 17 | 18 | 19 | The solution is bluetooth audio module + Stereo Speaker amplifier 20 | ![image](https://github.com/user-attachments/assets/fa1b662a-e1b8-4add-a23a-1842e9664163) 21 | The bluetooth audio module is very easy to source, it's called MH-M18. 22 | ![d8e22f566b35eec8c523338b65ded325](https://github.com/user-attachments/assets/870e180d-ea77-4786-b0f6-767c084fa577) 23 | The amplifier is a very classic type called PAM8406. 24 | ![image](https://github.com/user-attachments/assets/2b6e1704-28a0-40e7-b78f-e65098a3e902) 25 | 26 | # Speakers 27 | 28 | There are two types of speakers used on HackberryPi_CM5. 1507 speaker for Q20 version and 1511 speaker for Q10 and 9900 version. They are both 8Ω speakers and have difference at the dimension. You can find the datasheet about the speakers in this page. 29 | 30 | # Layout 31 | 32 | Because the speaker used is just pure speaker and it has no sound cavity. I glue the speaker on the PCB and make a hole on the PCB so that the sound from the speaker can spread to the internal case and that a good cavity, from my test, after making a hole on the PCB the sound quality can get much better. The image below shows the outline(green line) of the speaker and the hole(pink line) made for the sound. 33 | ![image](https://github.com/user-attachments/assets/4c991658-1e0e-4ed0-9fd1-6774af63f9e0) 34 | 35 | # Pair with the speakers 36 | 37 | After you turn on the device, you can hear sound from the speaker. But you need to manually pair with the speaker in different operating system, here are the steps: 38 | 39 | ### 1. First enable bluetooth on the pi. 40 | 41 | ### 2. Search device, you can find a device called XWF-M18-M28-M38, pair with it 42 | ![image](https://github.com/user-attachments/assets/a884615d-52f5-4f09-9425-45c1b4422a0e) 43 | 44 | ### 3. After you pair with it successfully, connect it 45 | ![image](https://github.com/user-attachments/assets/cdf1a293-7707-4bea-939b-78946b123b34) 46 | 47 | ### 4. Make a reboot, otherwise you will likely not be able to adjust the volume as far as I know. 48 | -------------------------------------------------------------------------------- /Speakers/Speaker-Layout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/Speaker-Layout.png -------------------------------------------------------------------------------- /Speakers/Speaker_Circuit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/Speakers/Speaker_Circuit.png -------------------------------------------------------------------------------- /USBHub/README.md: -------------------------------------------------------------------------------- 1 | # USBHub for HackberryPi_CM5 2 | 3 | There is an USBHub for HackberryPi_CM5 which can extend one of the USB3.0 Port on HakcberryPi_CM5 into 3 USB2.0 Ports and 1 USB3.0 Port. It's made of Aluminium case and it's very lightweighted. 4 | 5 | ![image](https://github.com/user-attachments/assets/0b223cb1-3d53-4490-b604-2260bc40c8d8) 6 | 7 | 8 | ⚠️ **Note:** 9 | This USBHub can comsumpe approximately 60-70ma @5V so it will add about 0.3-0.4W power consumption. 10 | 11 | #### You can buy this USBHUB together with HackberryPi_CM5 on elecrow 12 | -------------------------------------------------------------------------------- /img/HackberryPi_CM5_Blueprint_Whiteline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/img/HackberryPi_CM5_Blueprint_Whiteline.png -------------------------------------------------------------------------------- /img/HackberryPi_CM5_insideimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/img/HackberryPi_CM5_insideimage.png -------------------------------------------------------------------------------- /img/HackberryPi_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/img/HackberryPi_Logo.png -------------------------------------------------------------------------------- /img/HackberryPi_Q10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZitaoTech/HackberryPiCM5/5b80f2794cfcc1f69ce90053846251802ab3dd72/img/HackberryPi_Q10.jpg --------------------------------------------------------------------------------