From 9673b2cf67b00979546f6a316500f4c70ee040d7 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Fri, 30 Jun 2023 18:08:30 +0800 Subject: [PATCH] update outline pic --- README.md | 2 +- README_zh.md | 2 +- docs/assets/CherryUSB.svg | 1 + docs/assets/usb_outline.png | Bin 19760 -> 0 bytes 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 docs/assets/CherryUSB.svg delete mode 100644 docs/assets/usb_outline.png diff --git a/README.md b/README.md index 6a8b9aae..ede763f7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ CherryUSB is a tiny, beautiful and portable USB host and device stack for embedded system with USB IP. -![CherryUSB](./docs/assets/usb_outline.png) +![CherryUSB](./docs/assets/CherryUSB.svg) ## Why choose diff --git a/README_zh.md b/README_zh.md index 1e0613f1..0fe32526 100644 --- a/README_zh.md +++ b/README_zh.md @@ -4,7 +4,7 @@ CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的 USB 主从协议栈。 -![CherryUSB](./docs/assets/usb_outline.png) +![CherryUSB](./docs/assets/CherryUSB.svg) ## 为什么选择 diff --git a/docs/assets/CherryUSB.svg b/docs/assets/CherryUSB.svg new file mode 100644 index 00000000..98883008 --- /dev/null +++ b/docs/assets/CherryUSB.svg @@ -0,0 +1 @@ +
CherryUSB
CherryUSB
Hardware
Hardware
WCH
WCH
FSDEV
FSDEV
EHCI
EHCI
XHCI
XHCI
MUSB
MUSB
DWC2
DWC2
Bouffalo
Bouffalo
HPM
HPM
Device Controller Driver (DCD)
Device Controller Driver (DCD)
Host Controller Driver (HCD)
Host Controller Driver (HCD)
OS Abstraction Layer (OSAL)
OS Abstraction Layer (OSAL)
USB Host
USB Host
USB Host Core
USB Host Core
HID
HID
MSC
MSC
CDC
CDC
UAC
UAC
UVC
UVC
RNDIS
RNDIS
Printer
Printer
HUB
HUB
USB Device
USB Device
USB Device Core
USB Device Core
HID
HID
MSC
MSC
CDC
CDC
UAC
UAC
UVC
UVC
RNDIS
RNDIS
Printer
Printer
DFU
DFU
optional
optional
required
required
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/assets/usb_outline.png b/docs/assets/usb_outline.png deleted file mode 100644 index 4414d92225941c5fce5dc0d7c5d6b0f3959b02ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19760 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