Hi, guys. Thanks for your time. My name is Haseem and I'm co-founder of Give.Asia. It's a crowdfunding platform which is used by different charities across Asia to raise funds. We've raised about $30 million for different causes. It was started in 2009 when I was studying in NUS. The other company which I started is called Givola Labs, which was actually a byproduct of the first company. I think I've seen this trend that generally when you start companies, you start companies as byproducts of other companies. When we started Give.Asia, we were essentially a social enterprise. We didn't really have a very strong business model. In those early days, it was quite hard for us to hire developers or designers in Singapore. We did what a lot of startups would do. They started finding out-so-talent. They started finding people in other countries which might be a little bit cheaper. In that process of working with software developers in Eastern European countries and places like Poland, Vietnam, Russia, we got good at remote work. Last year, we started getting approached by a lot of companies, a lot of startups who were like, hey, it seems like you guys know how to do remote work. Can you help us with something similar? That's when we started the company. Just in one year, we had been quite fortunate to work with a lot of companies. That's why I just want to share experiences of how we have seen remote work do work. Hopefully, you will have some ideas or things that might be useful for you. Just before I get into it, I just want to get a brief idea of the audience here. I'm just going to ask a few questions. How many people here work in startups? We have a couple. How many people travel every day to work, let's say, half an hour in aggregate? One hour? Two hours? One hour is the place. How many people here think that when you are working at your workplace, sometimes there are people who tap you on the shoulder or say something and bring you out of the zone? We have a few hands. It takes time to get back into the zone once you are out of the zone. The other thing is, how many people here really believe that you can do, I guess you probably do eight hours or nine or ten hours of work every day, around eight hours? That's what we say. How many of you think you actually do eight hours of work? These are just some of the insights. You take that insight and then you try to crystallize it and you say that, okay, here's what I know. I'm traveling maybe half an hour to one hour, maybe a couple of hours every day. There are some places where people travel one hour to work, one hour back from work. It's not productive. You're losing that time. Second thing, you're not really working eight hours. If I were to be asked how much do I work, I'd track these things, so I probably work four hours a day because that's the real amount of work I get then. The rest of the time is thinking about where to go for lunch or it's like, okay, it's about to end or someone talking to you about their social problems or whatever it is. The third thing to think about is the whole fact that I talked about, you can put your headphones on, but if someone has a question, they will come in and they say, hey, I have this idea. I have this perfect idea which is going to change your startup or change the organization and then you kind of think to yourself, no, I've thought of that. I don't really think it's that game changer of an idea, but you can't say no to the person you have to listen to. You take that into account, here's what we found. Remote work is good for a few reasons. First reason is asynchronous communication. What that means is when people say something or they talk something, there are a few things happen. First, it gets written down somewhere. This could be slag, this could be an email. Here's the funny thing about writing. When you're writing, you just can't write without thinking. But when you're talking, you can talk. That's what I'm doing. You can talk without thinking. You can just say whatever it is. But when you're writing, you know there are consequences. You know that people can keep you accountable for it. You can go back to it and say that this is what you said. This is super important. What we see in remote work is that it forces clients or it forces developers, it forces everyone who's involved to think through. That's good. You need blocks of time for you to think, for you to think about hard problems. I'm assuming all of us here or most of us here, I think all of us here are knowledge workers. We are not doing things where you increase the amount of time our output is going to increase. It's knowledge work. That's where you want to have zone of time where you can work on creative stuff. I think this is pretty big, which is just having asynchronous communication, which is a big deal in remote work. The other thing is feedbacks. I'm sure most of you are working in office. Let me ask you this. What is the structured feedback process that you have in your workplace? Some people call it performance management system. Some people call it feedback. They have these things every one year, every six months, every quarter. Let me ask you a quick question. How many people here get feedback every week? How many people get feedback every month? It can be either. How many people get feedback every month? How many people get feedback every quarter? One, two, how many people get feedback every six months? One, how many people get feedback every one year? The rest of them probably don't get any feedback. Here's what I found out working in office culture. I realized that the fact that you only have your performance management systems probably every year, it's a big problem.  You're doing amazing things for the company. After one year, you find out that actually people think you were not doing your job. You're like, really? Is that true? I thought I was a superstar.  You say, okay, and why didn't you tell me earlier? It just doesn't make sense. You pay someone lots of money. You get them to work and then you don't tell them until one year in that they are not performing to the level you want them to perform. This is a little bit of a counterintuitive point. I think when we are in the same location, we just assume that feedback is there. But if you don't have a process, it's almost like you are a fish who's in the water and you've got so accustomed to water that you just don't realize it's water. It's almost like in office you feel like feedback is there, it's omnipresent, but it's not present because you're not doing it. What we do at remote, like what we are doing in our organization is that we are getting feedback every week. Every week you will find out from your clients or from people you're working with, what they liked about you, what they disliked about your work, how can you improve it? That is a huge, huge reason that keeps people engaged because they are satisfied. It's not that the feedback is always going to be positive, it will be negative, but that's what you want. That's the feedback loop that keeps you engaged at your job. That's something which we feel is very important and that's why every week all the people who are working in our teams, we have about 25 people all across the globe, they will have to do a self-evaluation. They have to talk about what they did that week, are they happy with it? What are the things they can improve? Then there will be a performance review by other people who work for them who will get the same thing. We find out that this has been a huge, huge advantage to people. The other thing I would say is autonomy. When it comes to knowledge work, I think autonomy is a really important thing. When you are doing your work and there are people always watching behind your shoulders, always intervening, it's not fun. When you are working remotely, you're making the decision on your own. You are saying that, okay, I'm going to be working for this many hours and this is what you can expect at the end of the day. It's a very clear contract. Then you build confidence. I think it's something which you have to do over time. We have engineers now who once they say that they're going to get something done, let's say in a week's time or in a month's time, we have worked with them enough to know that they will somehow manage their time and they will get the job done. We don't intervene. We let them do the things the way they want to do.  We don't really care where you are. You can be location free. One of the problems with working in office is that people always think that if you're in office, work is getting done. That's why a lot of people, there are a lot of people who go to work really early and they put their code or they put their bag there and then they go to Starbucks just so that if anyone looks at their desk, they know that the person is at work. He's working, his stuff is there. It's not that he hasn't showed up. So I think there is the cultural aspects and also I think in Singapore I've heard from friends who mentioned that you can't really leave until your boss leaves. So you're at your office and you've done your work but your boss hasn't left because he just takes so long to get his job done and because of that you have to stay there. So in my mind that's a waste of time. The other thing I would say is it is very important to have mastery in whatever knowledge work you're doing and what we have found is that this feedback is a huge reason for you to get the mastery because you know if you're doing well or not and also you can own your learning. I think another thing which a lot of organizations don't get right is that they under invest in training. So you know that's training is absolutely I would say the number one thing which any company could be doing to improve outcomes. If you are training your staff you are getting better and better. So remote work does help with that because you know you're saving those one or two hours every day that you were you know spending on travel. What if you could spend those one or two hours you know into you know being on Coursera or like you know reading a book about you know what you're interested in. It will show in your work in your craft getting improved. So that's another thing we really highly value and that's something which everyone in our company needs to do. The last thing I would mention before we just open it up you know for Q&A is essentially this whole idea of how we are competing at a global scale now.  And once you start working remotely you realize that the world is your oyster. If we were to talk about the kind of clients and kind of you know remote workers we are working with we are working with people are all across the globe we have we have developers in Russia, in Ukraine, in Vietnam, in India and you know all over the place and I think sometimes I or actually a lot of times I like working with them more because they are hungrier and you know they put in more hours they are very autonomous because they have that's the culture they have known they've been doing remote work for almost like five years ten years for clients across the globe so they have seen more things they have been exposed to more problems and that's that's what they understand they understand the future of world is project-based. It's not specifically a company-based profession you don't go into a company and you stay with the company for the rest of your life but you hop from projects to projects and your learning is optimized when you take part in different projects so last last one year our team has worked on fintech we have worked on e-commerce we have worked on logistics and we've worked on so many different projects and that's where you know the learning has been and you find that these people are really fast at taking these learnings from one project and applying to other projects which in certain organizations if you're just in one organization you might not have that because you learn what that organization knows but the growth stops because you haven't seen other projects so with that I'll just like you know I'll just open the open the floor for any discussion any feedback any questions that you might have. So for example, when I go to fintech, this is a place where I work and I have this interest to be a instructor and that's where I get work done and it's like it's a daily process that gives me into that zone and maybe you can distract me but office layouts can be arranged in the way that the access is a problem. But what I want to say is that there's component work and I think that offices are pretty good. So how do you so like in terms of getting, in terms of instilling and discipline in the work I think how do you suppose like getting your work to reach that level? Sure. What I've seen, what I've seen with the people who work against remote workers is that you know they're two types. They're one type who are like having sandwiches like who don't follow that work ethic and they're not following it and there's other ones who are really broke.  They have like high definition cameras so that they can have the Skype calls and they have to eat with them. Ladies and gentlemen, your attention please. The fire alarm has been activated in the building. We are investigating the situation. Please remain calm and stand by for further instruction. Thank you. Yeah please. Ladies and gentlemen, your attention please. The fire alarm has been activated in the building. We are investigating the situation. Please remain calm and stand by for further instruction. Thank you. Now is the time. Go. You always work with individuals so you sometimes work with small teams, remote teams.  I'm not talking about those people. I'm talking about people who are serious about their job. When we form a team of these guys we like to we like them to be together because you know they have they have an indoor chemistry so we do work with some teams as well. We take from a team, a team I mean like a physically team not remote. We are focused on remote so we all the people we have are on remote. All workers are remote. Yes. What are some downsides of remote? Sure one of the downsides that we find is that it's maybe a little bit harder or you want to like you know figure out if this person is going to perform or not. It takes a little bit longer because you know when you meet a person face to face maybe it's easier for you to to judge it but for us it's always been like we have to work with the person for at least a couple of months and then we know if it works or not. The other downside is sometimes you create human connection so you feel like you know I would love to be in a place where there are other people who are working on the same thing and the way we come the way we saw that issue is that we do like an annual get together so you know once once a year you come to a same location and then you meet all the people you work with so that would be the downside. Another other upside just came to my mind which I forgot is that when you're running a remote organization your office or it's not a physical space it's online which forces you to document everything and that's a that's a huge advantage if you walk into a traditional organization onboarding can be really tough because nobody has really documented the things so the person who just joined the team has to find all this information from hundred different people but if you if you join a remote organization everything will be documented so you can go back and you can kind of get these mini case studies of what that organization went through why did they make certain decisions and you know that's fairly helpful. What project management software or what kind of team collaboration software that you guys really use and what do you think looks really well for you guys. Yeah so we've tried it done and finally finally like you know we do a lot of like our issue management and stuff on GitHub so it's we have started using that as like the project management rule because for us almost like you know finding base camp or a sauna or all that for us it was a bit too complicated like there were so many features out there that we just couldn't pick it up so we really like you know go on to the basics and we're just doing everything on that for our knowledge management there's a new product we're using it's called Nuclino. Nuclino is a very good it's a it's a very new tool by community startup so that helps us with the knowledge management so all our documents everything goes on Nuclino it's a it's a biggie like platform where people can answer. If you've heard of this startup called remote here. Yeah yeah so there are a lot of there are a lot of companies which are writing this way for remote work so you know there are startups like remote here where in one year you go to six different locations and you you go with like 25 people and there's another one called jobbatical where you go for a job less sabbatical to a new country for one year and you you know work at something so there are a lot of remote focused organizations are is more focused on people who you know are pretty professional in what they do developers designers and we link them up with companies who are looking for top tier remote talent so we don't have a talent here. It would be software development it would be like design it would be content so I think you know remote work can be I would say for something like sales you have to be on the ground if you're doing like face-to-face sales if you're going inside sales it can serve you. What we do we use remote augmented reality for remote work but actually we are doing much more physical in that sense. We are scaling up experts, technicians for maybe taking a whole lot of alarms on them so actually we are doing remote work but bringing the idea of remote work to real support for people using augmented reality in a lot of other sense. It's like in Singapore we are confused now. Do you have any comments on the team sizes or on a specific project? We are not as big yet so we still work in very small teams we have like you know four or five people maximum working on a project but if you are interested in how this model scales when you're bigger companies you can look at automatic which is about 450 boys all over the globe. You can have a lot of innovation but you still may want to focus smaller teams focusing on specific area. For us I think we can follow I think it is Jeff Bezos who has this thing about like if you want to build something you have to have a team you know big enough or small enough that it can survive on a pizza right so so probably like two pizzas okay yeah so so like you know maximum four or five people beyond that it can be quite difficult. Ladies and gentlemen your attention please we have investigated the situation there has been a false alarm we apologize for any inconvenience caused thank you you have to give it to them they actually tell you ladies and gentlemen your attention please we have investigated the situation there has been a false alarm we apologize for any inconvenience caused thank you I like the feedback loop it's pretty good all right thanks you ladies and gentlemen your attention please


Alright yo what's good everyone Nick Smith is back today I'm gonna be showing you guys how you can play with a 2016 draft class so the players that are going into the draft in 2016 I'm gonna be showing you guys how you can you know get these guys in the draft and be able to draft them play with them train do whatever you want to do with them and this is the most accurate draft class available so let me first show you the draft class and then I'll show you guys how you can actually play with these guys first of all though I have to say embrace the pace you've done it again this man embrace the pace he creates draft classes every year and he does well I don't think it's every year but he's done it for the last two years and it's the most accurate draft class available it's the best draft class you can get and he goes by the name of embrace the pace on YouTube which you guys I'm gonna leave a link in the description box below so what I want you guys to do is go to his channel link in the description hit him up give him a subscribe and what I want you guys to do is comment Nick Smith in his latest video alright now this is the draft class banned Simmons and let me show you how good these guys look banned Simmons looks exactly like Ben Simmons all the ratings are exactly how he plays oh man he embrace the pace man he has all these guys down pack Jalen Brown looks like Jalen Brown Brandon Ingram looks like Brandon Ingram Dragon Bender Chris Dunn I mean Jamal Murray Mike Malik Newman Diamond Stone and obviously what he's going to do throughout the year is put new players in this draft class slowly as you know he finds out about them and things like that which is awesome so this is the draft class 100% pretty much done you guys can play with these guys and I'm gonna show you guys how you can do that so what you want to do if you want to start up on my league or my GM do it right now but you start one you got a new my GM I'm just gonna do my GM right now but you can do my league if you want and let me do on the Hall of Fame six minutes and yeah I'm not actually gonna play with this my GM but I'm gonna show you guys how you can get the draft class and then draft these players and do whatever you want to do with them so let's do this right now obviously it's gonna load and now let me choose the Miami Heat because I go for the Miami Heat and why not choose these guys you know how it is I got to choose the heat but I will do a heat my GM series on my channel for the future which you guys can check out later on down the road as now that I'm doing a lake is my GM series so I wait I'll wait for a while to the heat one um accomplishments I despise the Chicago Bulls I want you to guarantee that we'll win the season series against the miss you what the hell I will accomplish that me I'm not actually doing this my GM series but whatever I I just think that's kind of funny he our owner does not like Chicago damn that's pretty alright I didn't even know 2k would have something like this but here it is my GM allows you the ability to fully customize the draft class for the NBA draft how would you like this handled for the upcoming draft don't choose on a generated don't choose create edit draft class do load slash download draft class and download the best draft class it's not the one that here it will be I don't know if we be on the first screen hopefully it is eventually it will be on the first screen but as of now oh there it is actually here it is embrace the pace download this one 2016 with accurate phases and ratings you download this one and you will have the ability to play with some of the best NBA prospects and let me go to scouting prospect scouting the E rank and there we go Jailor Brown Dragon Mende Christon Benson is all these guys are in the game finally after a couple months of MIA 2k16 being released and a eventually what embrace the pace is going to do is also create a M a 2017 draft class which I'm excited for that one because they'll have thumb maker in it and if you haven't heard of thumb maker what are you doing right now just go on YouTube type up thumb maker he is incredible anyway I hope you guys enjoyed this quick video shout out to embrace the pace crazy roster shout out to Ben Simmons out of Australia I like Ben Simmons he's gonna be something special in the league anyway I hope you guys enjoy the video if you did don't forget to smash that like button subscribe to the channel if you're new and a roster update video should be coming soon so stay tuned for that spending warning Smith I'm out


Hello, and welcome to this presentation of the STM32 Serial Peripheral Interface. The internal serial peripheral interface or SPI provides a simple communication interface allowing the microcontroller to communicate with external devices. This interface is highly configurable to support many standard protocols. Applications benefit from the simple and direct connection to components which only requires a few pins. Thanks to the highly configurable capabilities of the SPI, many devices can be simply accommodated in the existing project. The STM32 SPI offers various operating modes that are explained in more detail in this presentation. The communication speed can't exceed half of the internal bus frequency and a minimum of two wires is required to provide the serial data flow synchronized by clock signal in a single direction. An optional hardware slave select control signal can be added. The data size and transmit shift order are configurable as well as the clock signal polarity and phase or polarity and timing adjustment of the slave select signal. The crucial configuration and settings can be protected by locking. At the protocol level the user can use specific data buffers with an optional automatic cyclic redundancy check or CRC calculation and transfers through the DMA controller. There are a wide range of SPI events that can generate interrupt requests. The simplified SPI block diagram shows the peripherals basic control mechanisms and functions. The separated clock domains are highlighted by areas with different colors. All the interconnection signals between the domains are synchronized. The PCLK clock domain has to be clocked when any access of the SPI registers is needed via the peripheral bus interface. The SPI master needs at least an active kernel clock as it has to output the clock signal for the slave. The SPI slave can transfer data without any internal clock signal as the serial interface domain is fully clocked externally via the SCK PIN. All of the data passes through receive and transmit buffers via their specific interfaces. The available features can be enabled or disabled depending on the peripherals configuration. There are four IO signals associated with the SPI peripheral. If required the peripheral can keep control over the associated IO signals even when it is disabled to prevent any unexpected glitches. The SPI master always controls the bus traffic and provides the clock signal to the dedicated slave through the SCK line. The master can select the slave it wants to communicate with through the optional slave select or NSS signal. Data stored in the dedicated shift registers can be exchanged synchronously between the master and slave through the MOSI master output slave input and the MISO master input slave output data lines. In full duplex mode both data lines are used and synchronous data flows in both directions. In simplex mode one node transmits data while the other receives the data. Data only flows in one direction depending on the communication direction only one data line is used. Unused SPI pins can be used for other purposes. Half duplex mode integrates the previous two modes by sharing a single line for data exchanges and data flows in a single direction at a time. There is a cross-connection between the master MOSI and the slave MISO pins in this mode. The master and slave have to alternate their transmitter and receiver roles synchronously when having a common data line. It is common to add a serial resistor on the half duplex data line to prevent possible temporary short circuit connection since master and slave nodes are not usually synchronized. When the SPI network includes more than one slave a star topology is commonly used. The master communicates with one slave at a time since you can only have one slave transmit data back to the master through the common MISO pin. In this topology a separated slave select signal from the master has to be provided to each slave node so the master can select which slave to communicate with. Thanks to separate slave select signals SPI data and clock format can be adapted for each slave if the multiple slave nodes do not have a common configuration. Another multi-slave configuration is the circular topology where the inputs and outputs of all the nodes are connected together in a closed serial chain. A common slave select signal is used for all the nodes as communication occurs at the same time. All nodes must have the same data and clock format configuration. Micro controller SPI nodes typically use separate internal transmit and receive shift registers so the data transferred between them has to be handled by software in a circular mode. A specific underrun feature can be selected during the slave configuration to automatically handle these transfers by hardware. SPI networks can operate in a multi-master environment. This mode is used to connect two master nodes exclusively. When neither node is active they are by default in a slave mode. When one node wants to take control of the bus it switches itself into master mode and asserts the slave select signal on the other node through a GPIO pin. Both slave select or SS pins work as a hardware input to detect potential bus collisions between nodes as only one can master the SPI bus at a single time. After the session is completed the active node master releases the slave select signal and returns back to passive slave mode waiting for the next session to start. Several parameters are used to set up the data format. Users can define the data frame size and the transmit order of the shift register. The clock can be set to one of four basic configurations defined in the Motorola SPI specifications. The combination of two bits controls the polarity and phase of the clock signal. When the phase control bit is cleared data bits are sampled on the odd clock edges and the even clock edges synchronize the shifting of the next bit onto the data line. This is the opposite when the phase control bit is set. The clock polarity bit defines the idle state of the clock signal and which clock edge is used for data sampling or shifting. The slave select signal can be used with both polarities and the functionality of the MOSI and MISO signals can be swapped. Several parameters can be used to optionally adjust the timing of the master transaction flow. Signal timings for the master node can be adjusted when needed. This is the case when a slave node needs a longer time to wake up from sleep mode following the setup of the SS active edge or when the slave is not able to handle a data flow that is too fast. Up to 15 additional serial clock signal period delays can be inserted by MIDI or MISI parameters. Data frames can be optionally interleaved by SS pulses. All SPI data transactions pass through the embedded FIFOs organized by bytes. A write access to the SPI write data register stores the written data in the transmit FIFO at the end of a send queue. A read access to the SPI read data register returns the oldest values stored in receive FIFO that has not been read yet. When the communication speed is fast and data frames too short it can be a demanding task to ensure correct data flows especially when the clock signal becomes continuous and full duplex mode is used. Slave nodes are more critical as they have to properly follow all the transaction timings provided by the master to prevent any data overrun or underrun conditions. The user can organize data into wider packets and handle multiple data read or write events by minimizing access to the data registers. The services are based on FIFO threshold events signaling packet ready operations. If FIFO thresholds are properly set multiple data packet services can be performed upon minimum FIFO occupancy events. Read and write events can even be serviced together based on common dual events. These features efficiently decrease the number of services and so minimize the load of the microcontroller when handling data flows. This can be especially useful in low power modes when data is sent while the microcontroller is sleeping. When the DMA is applied additionally it helps to significantly reduce overall loading on the system in run mode. In the figure shown you can see the principle of how four short data frames can be written and read by a single 32-bit or 16-bit access of the dedicated data registers associated with the FIFOs in accordance with the FIFO capacity and maximum configurable data size of the SPI instance. The SPI peripheral features two FIFOs to handle the data flow. The capacity of the FIFOs and maximum data frame size depends on the product and the peripheral instance. The frequency of the FIFO occupancy events depends on the FIFO threshold setting which organizes data into packets. A single packet can include up to 16 data frames but its size may not exceed half of the FIFO size. Possible combinations of data and packet size to fit into available FIFO space are listed in the table. Once room for a single packet is available in the transmit FIFO to store a new complete packet of data or a single complete data packet is ready to read in the receive FIFO the corresponding TXP or RXP occupancy flag is set. The user can then perform proper write or read service of data registers corresponding to a single packet size. Both packets to be transmitted and received can be serviced by a common handling procedure when the dual occupancy DXP flag is set. The occupancy flags are evaluated dynamically in relation to the bus traffic and the current FIFO content so they have to be checked exclusively once the associated packet service is fully completed. Both the master and slave can apply either endless data transfers or handle a defined number of data to be sent within a single session. The number of data is practically unlimited as it can be extended on the fly as long as the transaction is ongoing. A cyclic redundancy check can be implemented automatically or the slave select signal can be handled by hardware on the master side during the session. The master can start or suspend ongoing communication at any time. The current data frame is finished when the transaction is suspended. A specific CT size counter counts the number of data frames remaining in the current session, end of transaction or EOT and the transmission complete TXC flags indicate the end of session and bus idle while an additional specific TXTF flag indicates all data submitted for transmission and its event disables interrupts from transmission occupancy events. Transmissions automatically stop when the session is completed at the master side even if there is additional data in the transmit FIFO. All the FIFO's content is flushed when the SPI is disabled. The user has to read out all the received data before the SPI is disabled. Except for occasional errors the software has to take care of FIFO occupancy events only while the session is ongoing. Once the session is finished and the remaining received data is not aligned with the packet size, the last RxP occupancy flag is not set but the RxWNE flag is active and the level of the current FIFO occupancy is signaled by the specific RxP LVL level counter that depends on the data size. The counter value signals how many data frames remain to handle at the received FIFO. Nevertheless application software can still perform full packet reads without any drawbacks as the only consistent data will be popped from the FIFO. Similarly full packet writes to the transmit FIFO can be applied in this case as only the consistent data will be pushed into the FIFO while redundant writes will be discarded. When the DMA is applied such non-aligned data is handled automatically. To prevent overrun conditions and the loss of any data the master can temporarily suspend ongoing transactions when its received FIFO is full. The slave can be configured to detect and react to underrun conditions when no data is ready to be sent in its transmit FIFO and when the master continues or starts a new session. During protocol level communications the DMA controller can be used to automatically handle the data flow events the CRC calculations and the updating of the FIFO threshold. In case of threshold control the last odd data frame is correctly applied in packed mode when the number of frames is not aligned with the packet size. If the CRC is enabled separate CRC calculators are used for the transmitter and receiver. The CRC calculation result is automatically appended at the end of each transfer by the DMA controller or by software control. Both CRC polynomial pattern and CRC frame length are programmable. The size of the polynomial is defined by its most significant non-zero bit and it always has to be longer than the data size. The CRC frame length has to be equal or a multiple of the data size. The CRC calculation is frozen during the CRC pattern transaction. Results from the transmitter CRC calculator register are loaded directly into the shift register and the received CRC value is stored in the FIFO and compared with the receiver CRC result. Redundance CRC information are automatically flushed from the FIFOs. As the CRC registers are automatically initialized the CRC can be used in DMA circular mode. Initialization patterns for the receiver and transmitter can be configured either to zero or to all ones. By this flexibility a wide range of protocols is covered. The slave select signal is commonly used by the master node to select the slave node for communication. The signal implementation is mandatory in multi master and multi slave topologies. Though it is not mandatory at a single master slave pair it could be helpful for data flow synchronization regardless of the topology case. The slave select signal can operate as an input or as an output depending on the SSIOP control bit. The SS input can be managed by hardware or software depending on the SSM and SSI control bits in either master or slave modes. As an input slave it is used to identify itself as the active slave for communication. As a master input it signalizes a potential conflict between masters in a multi master system. The SS only works as an output in master mode and is managed by hardware in a standard or specific control mode. Additional slave select outputs can be provided by the GPIOs under software control. There are a few enhanced modes when the slave select signal is under specific hardware control. The slave select signal can operate in a pulse mode where the master generates pulses on the signal between data frames. The duration of the pulses is programmable in steps of SPI clock periods. The clock phase and polarity are configurable in this mode. Another enhanced mode is the TI mode where the data flow is synchronized by the SS pulses provided by the master on the last bit of data. The clock polarity and phase configuration is fixed and the slave data output is automatically switched into high impedance when the bus traffic stops and on a specific configurable timeout. Here is an overview of the SPI interrupt events. There are FIFO and error detection events to handle data flows. DMA requests are triggered internally by FIFO threshold events. The EOT event raises automatic control of the last incomplete packet when the overall number of data sent is not aligned with data packet size. Here is an overview of the SPI status in specific low power modes. The relevant system power domain depends on the peripheral instance. Every instance is divided and handled by three separated clock domains. The PCLK clock domain has to be clocked when any access of the SPI registers is needed via the peripheral bus interface. If the bus matrix clock is stalled, the peripheral registers content is retained. If the peripheral kernel clock is enabled, the clock generator can control the SPI master operation too. Otherwise, the peripheral is able to operate in slave mode only because the peripheral serial interface is then clocked by the external clock signal via SCK PIN exclusively. A peripheral event can be configured to wake up the system. The device cannot operate when its domain is in standby or shutdown mode. That is why it is important to ensure that all SPI traffic is completed before the peripheral domain enters standby or shutdown mode. The application acknowledges all pending interrupts before switching the SPI to low power mode. The SPI performance depends mainly on the applied clock. At a minimum, the clock frequency should be twice the required communication frequency. The actual rate of communication can be decreased by application factors. The user has to consider SPI bus loads such as the number of nodes, the connection distance, the input capacitance, as well as the GPIO settings. Fast GPI mode should be applied on the data and clock signals. Lower power supply voltage and extreme ambient temperatures slow down edges. Sometimes slower data hold or setup time requirements have to be respected between nodes. Applications can't always manage the fast data flow due to frequent servicing of exceptions. The DMA capacity has to be considered as well as the number of DMA channels used by the system, frequent interrupt services, or execution of non-interruptible instructions. The SPI can be used in a wide range of applications where a simple data transfer is required without the need for a complex communication protocol. Secured transfers are also supported when used with smart cards. Here are some helpful tips. The user should be aware that traffic on the bus may still be ongoing even if the DMA transaction is completed or the transmit FIFO becomes empty. That is why the user has to carefully check the peripheral status and follow the suggested procedures before disabling the SPI or placing it in standby or shutdown mode. Use the data size control if you need specific control like CRC or slave select signal handling by hardware. The use of the DMA, data packing, or handling dual event at full duplex mode can increase the system's overall performance. These features can help especially when data frames are short and a fast continuous communication flow is required. Hardware management of the slave select signal is not quite necessary in a single master single slave pair, but it can help synchronize the data flow and prevent conflicts in a multi-master system. When the SPI master has to be disabled temporarily for any reason, the user can prevent any glitches on the associated outputs working at alternate function mode by keeping them at forced under control. Then the GPIOs are kept at the state corresponding to the SPI idle configuration. The user should keep all the configuration and settings locked to prevent any accidental changes. There are some additional specific aspects which should be taken into account when designing an SPI network. Evaluation of FIFO occupancy flags is dynamic and depends on the bus flow. That is why the event service has to be applied when the complete data packet which corresponds to the FIFO threshold is finished. Once the complete packet service is finished, either read from or written in the FIFO, the occupancy flag can be tested again. Slave internal logic is clocked from an external SCK pin. Certain flags need a few periods of SCK signal cycling to be evaluated and can't be evaluated as long as the SCK signal stays at idle. There are six SPI instances within the STM32H7 and each support all the features presented so far. SPI2S1, SPI2S2, and SPI2S3 are multiplexed with I2S interface and have double extended FIFOs and data size registers. Refer to these other trainings which are linked directly to the SPI. Users should be familiar with all the peripherals that can affect the behavior of the SPI. There are some dedicated SPI application notes. To learn more about general SPI connections and interface issues there are many web pages as well as SPI bus monitoring tools available. Many digital oscilloscopes support direct reading and analysis of data and clock signals on the SPI bus.