summaryrefslogtreecommitdiff
path: root/notes.md
blob: 2a214188bf2feaf79b4c0ba7b0820bd044fe6fce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<!--
  notes.md - Misc notes

  Copyright (C) 2024  Luke T. Shumaker <lukeshu@lukeshu.com>
  SPDX-Licence-Identifier: AGPL-3.0-or-later
-->

Which file to include:

> The <stdint.h> header is a subset of the <inttypes.h> header

|------------------------------------------|-----------------------------------|--------------------------------|
| C INTS                                   |                                   |                                |
| `{CHAR,SHRT,INT,LONG,LLONG}_{MIN,MAX}`   | `<limits.h>`                      |                                |
| `U{CHAR,SHRT,INT,LONG,LLONG}_MAX`        | `<limits.h>`                      |                                |
|------------------------------------------|-----------------------------------|--------------------------------|
| C SIZED INTS                             |                                   |                                |
| `(C u)int{n}_t` (and `_{MIN,MAX,C}`)     | `<stdint.h>`                      | exact                          |
| `(u)int_least{n}_t` (and `_{MIN,MAX,C}`) | `<stdint.h>`                      | type may be more than `n` bits |
| `(u)int_fast{n}_t` (and `_{MIN,MAX,C}`)  | `<stdint.h>`                      | type may be more than `n` bits |
| `(u)intptr_t` (and `_{MIN,MAX,C}`)       | `<stdint.h>`                      |                                |
| `(u)intmax_t` (and `_{MIN,MAX,C}`)       | `<stdint.h>`                      |                                |
| `PRI*`                                   | `<inttypes.h>`                    |                                |
| `SCN*`                                   | `<inttypes.h>`                    |                                |
|------------------------------------------|-----------------------------------|--------------------------------|
| C ADDRESS INTS                           |                                   |                                |
| `ptrdiff_t`                              | `<stddef.h>`                      |                                |
| `PTRDIFF_{MIN,MAX}`                      | `<stdint.h>`                      |                                |
| `size_t`                                 | `<stddef.h>` (or `<sys/types.h>`) |                                |
| `SIZE_MAX`                               | `<stdint.h>`                      |                                |
|------------------------------------------|-----------------------------------|--------------------------------|
| C WCHAR INTS                             |                                   |                                |
| `wchar_t`                                | `<stddef.h>`                      |                                |
| `WCHAR_{MIN,MAX}`                        | `<stdint.h>`                      |                                |
| `wint_t`                                 | `<wchar.h>`                       |                                |
| `WINT_{MIN,MAX}`                         | `<stdint.h>`                      |                                |
|------------------------------------------|-----------------------------------|--------------------------------|
| POSIX INTS                               |                                   |                                |
| `sig_atomic_t`                           | `<signal.h>`                      |                                |
| `SIG_ATOMIC_{MIN,MAX}`                   | `<stdint.h>`                      |                                |
| `mode_t`                                 | `<sys/types.h>`                   | unsigned                       |
| `dev_t`                                  | `<sys/types.h>`                   | unsigned                       |
| `nlink_t`                                | `<sys/types.h>`                   | unsigned                       |
| `{u,g,}id_t`                             | `<sys/types.h>`                   | unsigned                       |
| `blkcnt_t`                               | `<sys/types.h>`                   | signed                         |
| `off_t`                                  | `<sys/types.h>`                   | signed                         |
| `fsblkcnt_t`                             | `<sys/types.h>`                   | unsigned                       |
| `fsfilecnt_t`                            | `<sys/types.h>`                   | unsigned                       |
| `ino_t`                                  | `<sys/types.h>`                   | unsigned                       |
| `blksize_t`                              | `<sys/types.h>`                   | signed                         |
| `pid_t`                                  | `<sys/types.h>`                   | signed                         |
| `ssize_t`                                | `<sys/types.h>`                   | signed                         |
| `SSIZE_MAX`                              | `<limits.h>`                      |                                |
| `suseconds_t`                            | `<sys/types.h>`                   | signed                         |
| `clock_t`                                | `<sys/types.h>`                   | could be float                 |
| `time_t`                                 | `<sys/types.h>`                   | signed                         |


Here's my reading of the lowest-bitrate possible for our HDMI sink:

HDMI v1.4 (2009/06/05) § 6.2.1 "Format Support Requirements"

>  - An HDMI Source shall support at least one of the following video
>    format timings:
>     + 640x480p @ 59.94/60Hz
>     + 720x480p @ 59.94/60Hz
>     + 720x576p @ 50Hz
> …
>
> - An HDMI Sink that accepts 60Hz video formats shall support the
>   640x480p @ 59.94/60Hz and 720x480p @ 59.94/60Hz video format
>   timings
>
> - An HDMI Sink that accepts 50Hz video formats shall support the
>   640x480p @ 59.94/60Hz and 720x576p @ 50Hz video format timings.

These latter 2 requirements match what is in CEI-861-D §3.1 "General
Video Format requirements" Table 1.

I'm a little confused about the 50Hz systems requirement; if it
needs to support 640x480@60Hz, does that mean that it's *also* a 60Hz
system and must therefore also support 720x480@60Hz?

Anyway, I need to support at least 640x480p@60Hz and 720x480@60Hz, and
it would be nice to support 720x576p@50Hz.  Note that PicoDVI supports
these first two, but not the @50Hz one.

| format        | bitrate               |
|---------------|-----------------------|
| 640x480p@60Hz | 18,432,000 pixels/sec |
| 720x480p@60Hz | 20,736,000 pixels/sec |
| 720x576p@50Hz | 20,736,000 pixels/sec |

https://forums.parallax.com/discussion/download/128730/Hdmi-1.4-1000008562-6364143185282736974850538.pdf
https://ia803002.us.archive.org/1/items/CEA-861-D/CEA-861-D.pdf

The RP2040 has several clocks:

Sources:

- GPCLK0 (GPIO-based clock 0)
- GPCLK1 (GPIO-based clock 1)
- XOSC (External (Crystal) Oscillator)
  + System PLL
  + USB PLL
- ROSC (Ring Oscillator)

These can be muxed onto several clocks which each have dividers (and
most of them enable/disable too):

- clk_gpout0 (GPIO Muxing)
- clk_gpout1 (GPIO Muxing)
- clk_gpout2 (GPIO Muxing)
- clk_gpout3 (GPIO Muxing)
- clk_adc (ADC)
- clk_usb (USB)
- clk_RTC (RTC)
- clk_peri (UART and SPI)
- clk_sys (CPU, bus, RAM)
- clk_ref (watchdog and timers)

```
SSP = ARM Primecell Synchronous Serial Port
                    ^           ^      ^
```

- SPI (Serial Peripheral Interface - Motorola)
- SSI (Synchronous Serial Interface - Texas Instruments)
- Microwire (National Semiconductor)

| `sclk` | `SSPCLKOUT` | `SSP_CLK_OUT` | SSP clock output              |
| `ss_n` | `SSPFSSOUT` | `SSP_FSS_OUT` | SSP frame/slave select output |
| `tx`   | `SSPTXD`    | `SSP_TX_D`    | SSP transmit data             |
| `rd`   | `SSPRXD`    | `SSP_RX_D`    | SSP receive data              |

"The SPI uses `clk_peri` as its reference clock for SPI timing, and is
referred to as `SSPCLK` in the following sections.  `clk_sys` is used
as the bus clock, and is referred to as `PCLK` in the following
sections" wut does that mean

8 16-bit values in both the TX buffer and the RX buffer


----

The theoretical max rate of the the W5500 is just shy of 80 Mb/s = 10 MB/s

IDK about HDMI compression yet, but naively uncompressed we're looking
at wanting to shove ~60 MB/s (480 Mb/s).

Compression is an optional feature introduced in HDMI 2.1 :(